Escape одиночная кавычка - PullRequest
       8

Escape одиночная кавычка

30 голосов
/ 03 ноября 2011

Следующее работает как положено.Я хочу заменить слово «я» на \ '

 echo "test ' this" | sed 's/'"'"'/me/g'
test me this

Ожидаемый результат:

test \' this

Можно ли также избежать двойных кавычек в одной и той же команде?

Ответы [ 4 ]

47 голосов
/ 03 ноября 2011

Ваш вопрос немного сбивает с толку, поскольку в исходной строке нет me для замены.Тем не менее, я думаю, что у меня есть.Позвольте мне перефразировать:

У меня есть команда sed, которая может успешно заменить одиночную кавычку ' словом me.Я хочу подобный, который может заменить его на последовательность символов \'.

Если это так (вы просто хотите экранировать одинарные кавычки), вы можете использовать:

pax$ echo "test ' this" | sed "s/'/\\\'/g"
test \' this

Используя двойные кавычки вокруг команды sed, вы избавляетесь от необходимости беспокоиться о вложенных одинарных кавычках.Вам делать придется беспокоиться о побеге, поскольку оболочка будет поглощать один уровень побега, так что sed увидит:

s/'/\'/g

, который преобразует ' в \'по желанию.

Если вам нужен способ избежать как одинарных , так и двойных кавычек с одним sed, вероятно, проще всего предоставить несколько команд для sed, чтобы вы могли использоватьальтернативные кавычки:

pax$ echo "Single '" 'and double "'
Single ' and double "

pax$ echo "Single '" 'and double "' | sed -e "s/'/\\\'/g" -e 's/"/\\"/g'
Single \' and double \"

Если я неправильно понял ваши требования, несколько примеров могут помочь.

12 голосов
/ 01 июля 2014

У меня есть некоторые сомнения по поводу вашего вопроса, но в любом случае, возможно, мое решение будет полезным для всех.

Позвольте мне прежде всего сказать:

\\ это означает один \, потому что когда вы соединяете два, вы отменяете его значение как метасимвол. И \ x27 в виде одинарной кавычки, по крайней мере, для меня проще, чем работать с одинарной кавычкой ...

Наконец я поставил

echo "test me this" | sed 's/me/\\\x27/g'

так что здесь вы должны проверить меня ==> проверить \ 'это

   echo "test \' this" | sed 's/\\\x27/me/g'

а здесь наоборот.

7 голосов
/ 03 ноября 2011

Это то, что вы имели в виду?командной строки и сделайте «дыры» для параметров двойной кавычки, используемых в них.

0 голосов
/ 06 сентября 2018

Мне нужно было использовать 'в скрипте для создания файла конфигурации dnsmasq, я использовал эту технику:

echo -e "\toption name *$name*"|sed s/*/\'/g 

пример вывода

option name 'GarageDoor'
...