Как сопоставить одинарную кавычку в sed
Вопрос
Как сопоставить одинарные кавычки в sed, если выражение заключено в одинарные кавычки:
sed -e '...'
Например, нужно сопоставить этот текст:
'foo'
Решение
Вы можете либо использовать:
"texta'textb" (APOSTROPHE inside QUOTATION MARKs)
или
'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)
Я использовал имена символов в Юникоде.ОБРАТНАЯ КОСАЯ ЧЕРТА более широко известна как обратная косая черта.
В последнем случае вы закрываете свой апостроф, затем заключаете его в кавычки с обратной косой чертой, затем открываете другой апостроф для остальной части текста.
Другие советы
Как отмечалось в комментариях к вопросу, на самом деле речь идет не о sed, а о том, как включить кавычку в строку, заключенную в кавычки, в оболочке (напримербаш).
Чтобы прояснить предыдущий ответ, вам нужно экранировать кавычку обратной косой чертой, но вы не можете сделать это в выражении, заключенном в одинарные кавычки.Со страницы руководства bash:
Заключение символов в одинарные кавычки сохраняет буквальное значение каждого символа внутри кавычек.Один цитата не могут возникать между отдельными цитаты, даже если предшествует обратная косая черта.
Следовательно, вам необходимо завершить выражение, заключенное в кавычки, вставить экранированную кавычку и начать новое выражение, заключенное в кавычки.Удаление кавычек из командной строки не добавляет никаких дополнительных пробелов, так что фактически вы получаете конкатенацию строк.
Итак, чтобы ответить на первоначальный вопрос о том, как заключить выражение 'foo' в одинарные кавычки, вы бы сделали что-то вроде этого:
sed -e '...'\''foo'\''...'
(где '...' - это остальная часть выражения sed).
В целом, для удобства чтения вам было бы гораздо лучше изменить окружающие кавычки на двойные, если это вообще возможно:
sed -e "...'foo'..."
[В качестве примера потенциального кошмара обслуживания первого подхода (с одинарными кавычками) обратите внимание, как подсветка синтаксиса StackOverflow окрашивает кавычки, обратную косую черту и другой текст - это определенно неверно.]