Le "|" a également besoin d’une barre oblique inverse pour obtenir sa signification particulière.
echo "blia blib bou blf" | sed 's/bl\(ia\|f\)//g'
fera ce que vous voulez.
Comme vous le savez si tout échoue, lisez le manuel :-).
Manuel de l'utilisateur GNU sed , section 3.3 Présentation de la syntaxe des expressions régulières :
`REGEXP1 \ | REGEXP2 '
Correspond à REGEXP1 ou REGEXP2.
Notez le backslash ...
Malheureusement, la syntaxe des expressions rationnelles n’est pas vraiment normalisée ... Il existe de nombreuses variantes, qui diffèrent entre autres choses pour lesquelles les "caractères spéciaux" doivent \ et qui ne le sont pas. Dans certains cas, il est même configurable ou dépend de commutateurs (comme dans GNU grep
, que vous pouvez basculer entre trois dialectes de regex différents).
Cette réponse en particulier s’applique à GNU sed . Il existe d'autres sed
variantes, par exemple celle utilisée dans les BSD, qui se comportent différemment.
sed
prend en charge l’alternance, mais uniquement avec la syntaxe regex "étendue" (-E
), ce qui signifie qu’il n’ya pas de barre oblique inverse, ni sur les tubes ni entre parenthèses:echo "blia blib bou blf" | sed -E 's/bl(ia|f)//g'
Plusieurs remarques concernant les
sed
implémentations non Gnu : Au moins sous OS X, vous pouvez utiliser l'-E
argument poursed
:Vous pouvez ensuite utiliser des métacaractères d'expression régulière sans leur échapper. Exemple:
la source
GNU sed supporte également l'
-r
option (expressions régulières étendues). Cela signifie que vous n'avez pas à échapper aux métacaractères:Sortie:
la source
-r
option est vraiment très utile pour la lisibilité des expressions. Cela devrait être la réponse acceptée.Le
\|
ne fonctionne pas avec sed sous Solaris 10 non plus. Ce que j'ai fait était d'utiliserla source
Suivi: sed -E le permet sur MacOS. Pas de backslash nécessaire pour |.
la source
Dans GnuWin32 sous Windows, la syntaxe est la suivante
sed "s/thing1\|thing2/ /g" source > destination
.Les guillemets doivent être de type
"
- "Requis" pour que la commande soit analysée.la source