Как избежать одиночной кавычки в выражении sed, которое уже окружено кавычками?
Например:
sed 's/ones/one's/' <<< 'ones thing'
Ответ 1
Цитата sed коды с двойными кавычками:
$ sed "s/ones/one's/"<<<"ones thing"
one thing
Мне не нравятся экраны с сотнями обратных косых черт - болит глаза. Обычно я делаю так:
$ sed 's/ones/one\x27s/'<<<"ones thing"
one thing
Ответ 2
Один трюк состоит в том, чтобы использовать конкатенацию строки оболочки из соседних строк и избегать внедренной цитаты, используя экранирование оболочки:
sed 's/ones/two'\''s/' <<< 'ones thing'
two thing
В выражении sed есть 3 строки, которые затем сшивают вместе:
sed 's/ones/two'
\'
's/'
Надеюсь, что это поможет кому-то еще!
Ответ 3
Лучший способ - использовать $'some string with \' quotes \''
например:
sed $'s/ones/two\'s/' <<< 'ones thing'
Ответ 4
Я знаю, что это будет звучать как полицейский, но я никогда не смог бы заставить sed работать, когда в строке были одиночные и двойные кавычки. Чтобы помочь любым новичкам, таким как я, которые испытывают проблемы, один из вариантов заключается в разделении строки. Мне пришлось заменить код в более чем 100 файлах index.hmtl. Строки имели как одиночные, так и двойные кавычки, поэтому я просто разделил строку и заменил первый блок на
<!--, а второй - с -->. Это создало беспорядок моих файлов index.html, но оно сработало.