использование чередования “|” в regex sed

Я использую sed, GNU sed версия 4.2.1. Я хочу использовать чередование "|" символ в подвыражении. Например:

echo "blia blib bou blf" | sed 's/bl\(ia|f\)//g'

должен возвратиться

" blib bou "

но это возвращается

"blia blib bou blf".

Как у меня может быть ожидаемый результат?

79
задан 21.09.2015, 16:56

1 ответ

"|" также нуждается в обратной косой черте для получения ее особого значения.

echo "blia blib bou blf" | sed 's/bl\(ia\|f\)//g'

сделает то, что Вы хотите.

Как Вы знаете, если все остальное перестало работать, прочитайте руководство :-).

GNU sed руководство пользователя, разделите 3.3 Обзора Синтаксиса регулярного выражения:

'REGEXP1 \| REGEXP2'

Соответствия или REGEXP1 или REGEXP2.

Отметьте обратную косую черту...

К сожалению, regex синтаксис действительно не стандартизирован... существует много вариантов, которые отличаются среди прочего, в котором для "специальных символов" нужно \и которые не делают. В некоторых это даже настраивается или зависит от переключателей (как в GNU grep, который можно переключить между тремя различными regex диалектами).

Этот ответ в особенности для GNU sed. Существуют другие sed варианты, например, тот использовал в BSDs, которые ведут себя по-другому.

110
ответ дан 07.12.2019, 08:04

Теги

Похожие вопросы