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