Замените на "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 ответа

Решение

Не так сложно

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

Крайне важно процитировать "$new" переменная, когда вы используете его.

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

$ perl -pe "s/^(.*)'(.*)$/file '\$1\'\\\'\'\$2'/" <<< "the string's problem"
file 'the string'\''s problem'
Другие вопросы по тегам