Следующее работает как ожидалось. Я хочу заменить слово "я" на "
echo "test ' this" | sed 's/'"'"'/me/g'
test me this
Ожидаемый результат:
test \' this
Можно ли избежать двойных кавычек и в той же команде?
Следующее работает как ожидалось. Я хочу заменить слово "я" на "
echo "test ' this" | sed 's/'"'"'/me/g'
test me this
Ожидаемый результат:
test \' this
Можно ли избежать двойных кавычек и в той же команде?
Ваш вопрос немного запутан, так как там нет 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 \"
Если я неправильно понял ваши требования, несколько примеров могут помочь.
У меня есть некоторые сомнения по поводу вашего вопроса, но в любом случае мое решение может быть полезным для всех.
Позвольте мне сказать прежде всего:
\\, что означает одно, потому что, когда вы ставите два вместе, вы отменяете его значение как метасимвол. И \x27 как одинарная цитата, по крайней мере для меня проще, чем работать с одиночным двойным...
Наконец, я положил
echo "test me this" | sed 's/me/\\\x27/g'
поэтому здесь вы проверите меня == > test\'this
echo "test \' this" | sed 's/\\\x27/me/g'
и вот обратное.
Это то, что вы имеете в виду?
# 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... в командной строке и делать "дыры" для параметров двойной кавычки, используемых в них.