Il semble par exemplecat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
que je dois caractères d'échappement pour former une expression régulière. Dans ce cas, j'ai dû échapper des accolades pour être interprété comme un certain nombre de fois.
Pourquoi ? Je m'attendais à ce que tout soit un caractère regex à moins d'être échappé. C'est à dire. le contraire.
Réponse acceptée :
C'est parce que sed
utilise les BRE POSIX (expressions régulières de base) par opposition aux ERE (expressions régulières étendues) auxquelles vous êtes probablement habitué de Perl ou d'amis.
Depuis le sed(1)
page de manuel :
REGULAR EXPRESSIONS
POSIX.2 BREs should be supported, but they aren't completely because of
performance problems. The n sequence in a regular expression matches
the newline character, and similarly for a, t, and other sequences.
Citation pertinente du lien ci-dessus :
La saveur des expressions régulières de base ou BRE standardise une saveur similaire à celle utilisée par la commande grep UNIX traditionnelle. C'est à peu près la plus ancienne saveur d'expression régulière encore utilisée aujourd'hui. Une chose qui distingue cette saveur est que la plupart des métacaractères nécessitent une barre oblique inverse pour donner au métacaractère sa saveur. La plupart des autres versions, y compris POSIX ERE, utilisent une barre oblique inverse pour supprimer la signification des métacaractères.
Citation textuelle du commentaire de Craig Sanders :
Notez que dans GNU sed au moins, vous pouvez indiquer à sed d'utiliser des expressions rationnelles étendues avec l'option de ligne de commande -r ou –regexp-extended. Ceci est utile si vous voulez éviter d'alourdir votre script sed avec des échappements excessifs.