Вопрос

Как сопоставить одинарные кавычки в 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 окрашивает кавычки, обратную косую черту и другой текст - это определенно неверно.]

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top