Замена “sed” символ с обратной косой чертой и использованием это в переменной

У меня есть это жало: the string's problem и я хочу изменить это на:

file 'the string'\''s problem'

Мой код похож на это:

newline=`echo "$string" | sed "s/'/'\\\''/g"`
echo $newline | sed "s|$newline|file '$newline'|g" >> "$newPList"

Но результат этого:

file 'the string'''s problem'

Какие-либо предложения?

2
задан 15 July 2015 в 19:13

2 ответа

Не так усложнил

$ str="string's problem"
$ sed 's/'\''/&\\&&/g' <<<"$str"
string'\''s problem
$ new="file '$(sed 's/'\''/&\\&&/g' <<<"$str")'"
$ echo "$new"
file 'string'\''s problem'

, критически важно заключить в кавычки "$new" переменная при использовании его.

3
ответ дан 2 December 2019 в 01:45

Это perl острота, все в одном, без дополнительно строковых конструкций ;)

$ perl -pe "s/^(.*)'(.*)$/file '\$1\'\\\'\'\$2'/" <<< "the string's problem"
file 'the string'\''s problem'
3
ответ дан 2 December 2019 в 01:45

Другие вопросы по тегам:

Похожие вопросы: