GNU/Linux >> Tutoriales Linux >  >> Linux

¿Necesita escapar de los caracteres Regex en Sed para que se interpreten como caracteres Regex?

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.


Linux
  1. sed - cómo hacer grupos de expresiones regulares usando sed

  2. ¿Por qué `\d` no funciona en expresiones regulares en sed?

  3. Cómo usar la anticipación para excluir caracteres especiales en una expresión regular

  4. ¿Cómo reemplazar recursivamente los caracteres con sed?

  5. Expresión regular para encontrar caracteres dobles en Bash

Introducción a las expresiones regulares

Expresiones regulares en Grep (Regex)

Tutorial de expresiones regulares para ejemplos de Linux (Sed y AWK)

10 ejemplos prácticos de expresiones regulares con grep

¿Por qué sed no usa el modo regex extendido de forma predeterminada?

Las secuencias de escape repetidas no se interpretan en Linux tty