Я использую sed, GNU sed версия 4.2.1. Я хочу использовать чередование "|" символ в подвыражении. Например:
echo "blia blib bou blf" | sed 's/bl\(ia|f\)//g'
должен возвратиться
" blib bou "
но это возвращается
"blia blib bou blf".
Как у меня может быть ожидаемый результат?
"|" также нуждается в обратной косой черте для получения ее особого значения.
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, которые ведут себя по-другому.