"|" также нужен обратный слеш, чтобы получить его особое значение.
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, которые ведут себя по-разному.
sed
поддерживает чередование, но только с «расширенным» синтаксисом регулярных выражений (-E
) - что означает отсутствие обратной косой черты ни в каналах, ни в скобках:echo "blia blib bou blf" | sed -E 's/bl(ia|f)//g'
Поскольку есть несколько комментариев относительно реализаций не-Gnu
sed
: По крайней мере, в OS X вы можете использовать-E
аргумент дляsed
:Затем вы можете использовать метасимволы регулярных выражений, не экранируя их. Пример:
источник
GNU sed также поддерживает эту
-r
опцию (расширенные регулярные выражения). Это означает, что вам не нужно избегать метасимволов:Выход:
источник
-r
опция действительно очень полезна для удобства чтения выражений. Это должен быть принятый ответ.Также
\|
не работает с sed на Solaris 10. То, что я сделал, было использоватьисточник
Продолжение: sed -E позволяет это на MacOS. Никакой обратной косой черты не требуется для |.
источник
В GnuWin32 на Windows sed синтаксис такой
sed "s/thing1\|thing2/ /g" source > destination
.Кавычки должны иметь тип
"
- это «Обязательно» для разбора команды.источник