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

Как сопоставить одну цитату в sed

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

sed -e '...'

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

'foo'
4b9b3361

Ответ 1

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

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

или

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

Я использовал имена символов Unicode. REVERSE SOLIDUS более известен как обратная косая черта.

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

Ответ 2

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

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

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

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

Итак, чтобы ответить на исходный вопрос о том, как сделать одиночную цитату, выражение "foo", вы бы сделали примерно следующее:

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

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

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

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

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