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.