GNU/Linux >> Linux Esercitazione >  >> Linux

Hai bisogno di sfuggire ai caratteri Regex in Sed per essere interpretato come caratteri Regex?

Sembra ad es.
cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
che io devo caratteri di escape per formare un'espressione regolare. In questo caso ho dovuto evitare le parentesi graffe per essere interpretato come un numero di volte.
Perché? Mi aspettavo che tutto sarebbe stato un carattere regolare se non sfuggito. Cioè. il contrario.

Risposta accettata:

Questo perché sed utilizza POSIX BRE (Basic Regular Expressions) al contrario delle ERE (Extended Regular Expressions) a cui probabilmente sei abituato da Perl o amici.

Dal sed(1) pagina 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.

Citazione pertinente dal link sopra:

L'aroma Basic Regular Expressions o BRE standardizza un'aroma simile a quella usata dal tradizionale comando UNIX grep. Questo è praticamente il più antico sapore di espressione regolare ancora in uso oggi. Una cosa che distingue questo sapore è che la maggior parte dei metacaratteri richiede una barra rovesciata per dare al metacarattere il suo sapore. La maggior parte delle altre versioni, incluso POSIX ERE, utilizza una barra rovesciata per sopprimere il significato dei metacaratteri.

Citato testualmente dal commento di Craig Sanders:

Nota che almeno in GNU sed, puoi dire a sed di usare espressioni regolari estese con l'opzione della riga di comando -r o –regexp-extended. Questo è utile se vuoi evitare di rovinare il tuo script sed con un'escape eccessivo.


Linux
  1. Estrarre un'espressione regolare abbinata a "sed" senza stampare i caratteri circostanti?

  2. Sed può sostituire i caratteri di nuova riga?

  3. Sed rimuove i caratteri dalla nuova riga?

  4. Cosa c'è di sbagliato nella mia regex lookahead in GNU sed?

  5. Le sequenze di escape con eco non vengono interpretate in Linux tty

Iniziare con le espressioni regolari

Espressioni regolari in Grep (Regex)

Tutorial Regex per esempi di Linux (Sed e AWK).

10 esempi pratici di regex con grep

Perché sed non utilizza la modalità regex estesa per impostazione predefinita?

Espressione regolare con sed