El "|" También necesita una barra invertida para obtener su significado especial.
echo "blia blib bou blf" | sed 's/bl\(ia\|f\)//g'
Hará lo que quieras.
Como sabes, si todo lo demás falla, lee el manual :-).
Manual del usuario de GNU sed , sección 3.3 Descripción general de la sintaxis de expresión regular :
`REGEXP1 \ | REGEXP2 '
Coincide ya sea REGEXP1 o REGEXP2.
Tenga en cuenta la barra invertida ...
Desafortunadamente, la sintaxis de expresiones regulares no está realmente estandarizada ... hay muchas variantes, que difieren entre otras cosas en las que los "caracteres especiales" necesitan \ y los que no. En algunos incluso es configurable o depende de interruptores (como en GNU grep
, que puede cambiar entre tres dialectos de expresiones regulares diferentes).
Esta respuesta en particular es para GNU sed . Hay otras sed
variantes, por ejemplo, la utilizada en los BSD, que se comportan de manera diferente.
sed
admite alternancia, pero solo con sintaxis de expresiones regulares "extendida" (-E
), lo que significa que no hay barras invertidas ni en las tuberías ni en los paréntesis:echo "blia blib bou blf" | sed -E 's/bl(ia|f)//g'
Dado que hay varios comentarios con respecto a
sed
implementaciones que no son Gnu : al menos en OS X, puede usar el-E
argumento parased
:Luego puede usar metacaracteres de expresión regular sin escapar de ellos. Ejemplo:
fuente
GNU sed también admite la
-r
opción (expresiones regulares extendidas). Esto significa que no tiene que escapar de los metacaracteres:Salida:
fuente
-r
opción es realmente muy útil para la legibilidad de las expresiones. Esa debería ser la respuesta aceptada.El
\|
no funciona con sed en Solaris 10 tampoco. Lo que hice fue usarfuente
Seguimiento: sed -E lo permite en MacOS. No necesita barra invertida para |.
fuente
En GnuWin32 en Windows sed, la sintaxis es
sed "s/thing1\|thing2/ /g" source > destination
.Las comillas deben ser de tipo
"
: esto es "Obligatorio" para que se analice el comando.fuente