Parece, por ejemplo,cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
que debo caracteres de escape para formar una expresión regular. En este caso tuve que escapar de llaves para ser interpretado como un número de veces.
¿Por qué? Esperaba que todo fuera un carácter regex a menos que se escapara. Es decir. lo contrario.
Respuesta aceptada:
Esto se debe a que sed
usa POSIX BRE (Expresiones regulares básicas) en lugar de ERE (Expresiones regulares extendidas) a las que probablemente esté acostumbrado de Perl o amigos.
Del sed(1)
página man:
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.
Cita relevante del enlace anterior:
El tipo de expresiones regulares básicas o BRE estandariza un tipo similar al utilizado por el comando grep tradicional de UNIX. Este es prácticamente el sabor de expresión regular más antiguo que todavía se usa en la actualidad. Una cosa que distingue a este estilo es que la mayoría de los metacaracteres requieren una barra invertida para darle su sabor al metacarácter. La mayoría de los otros sabores, incluido POSIX ERE, usan una barra invertida para suprimir el significado de los metacaracteres.
Citado textualmente del comentario de Craig Sanders:
Tenga en cuenta que al menos en GNU sed, puede decirle a sed que use expresiones regulares extendidas con la opción de línea de comando -r o –regexp-extended. Esto es útil si quiere evitar afear su secuencia de comandos sed con escapes excesivos.