Как найти одинарную кавычку в sed - PullRequest
32 голосов
/ 18 сентября 2008

Как сопоставить одну кавычку в sed, если выражение заключено в одинарные кавычки:

sed -e '...'

Например, необходимо соответствовать этому тексту:

'foo'

Ответы [ 2 ]

45 голосов
/ 18 сентября 2008

Вы можете использовать:

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

или

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

Я использовал имена символов Юникода. ОБРАТНЫЙ СОЛИДУС более известен как обратный слеш.

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

37 голосов
/ 16 октября 2008

Как отмечено в комментариях к вопросу, на самом деле речь идет не о sed, а о том, как включить цитату в строку в кавычках в оболочке (например, bash).

Чтобы уточнить предыдущий ответ, вам нужно экранировать кавычку с обратной косой чертой, но вы не можете сделать это в выражении, заключенном в одинарные кавычки. Со страницы руководства bash:

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

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

Итак, чтобы ответить на первоначальный вопрос о том, как заключить в кавычки выражение «foo», вы должны сделать что-то вроде этого:

sed -e '...'\''foo'\''...'

(где '...' - остальная часть выражения sed).

В целом, для удобства чтения было бы гораздо лучше изменить окружающие кавычки на двойные, если это вообще возможно:

sed -e "...'foo'..."

[В качестве примера возможного кошмара обслуживания первого подхода (одинарная кавычка) обратите внимание на то, как синтаксис StackOverflow, выделяющий цвета кавычек, обратной косой черты и другого текста - это определенно не правильно.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...