"|" также нужен обратный слеш, чтобы получить его особое значение.
echo "blia blib bou blf" | sed 's/bl\(ia\|f\)//g'
будет делать то, что вы хотите.
Как вы знаете, если ничего не помогает, прочитайте руководство :-).
Руководство пользователя GNU sed, раздел 3.3 Обзор синтаксиса регулярных выражений:
`REGEXP1\| REGEXP2'
Совпадает с REGEXP1 или REGEXP2.
Обратите внимание на обратную косую черту ...
К сожалению, синтаксис регулярных выражений на самом деле не стандартизирован ... существует много вариантов, которые отличаются между прочим, в которых "специальные символы" нужны \, а какие нет. В некоторых это даже настраивается или зависит от переключателей (как в GNU grep
, который вы можете переключать между тремя различными диалектами регулярных выражений).
Этот ответ, в частности, для GNU sed. Существуют и другие варианты sed
, например, используемый в BSD, которые ведут себя по-разному.