Подтвердить что ты не робот

Побег одиночной кавычки

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

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

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

test \' this

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

4b9b3361

Ответ 1

Ваш вопрос немного запутан, так как там нет 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 \"

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

Ответ 2

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

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

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

Наконец, я положил

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

поэтому здесь вы проверите меня == > test\'this

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

и вот обратное.

Ответ 3

Это то, что вы имеете в виду?

# cat <<! | sed 's/["'"'"']/\\&/g'
> quote '
> double quotes "
> quote ' double quotes "
> !
quote \'
double quotes \"
quote \' double quotes \"

Или это:

# echo "test me test"|sed 's/me/\\'"'"'/g'
test \' test
# echo "test me test"|sed 's/me/\\"/g'
test \" test

Я считаю, что лучше всего всегда указывать команды sed/awk/perl... в командной строке и делать "дыры" для параметров двойной кавычки, используемых в них.