La sostituzione di [0-9] con [AJ] non funziona con sed


11

Sto lavorando a un comando che sostituisce tutte le cifre 0-9 con le lettere corrispondenti in sed. So che sto facendo qualcosa di sbagliato, ma sed non sta interpretando la regex sostitutiva come niente ma una stringa letterale.

Il comando che sto usando è sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Mi sembra abbastanza semplice, ma sono rimasto bloccato per circa un'ora. L'output che ricevo sostituisce solo 0-9 con la stringa "[AJ]"

Risposte:


38

In sostituzione, solo la corrispondenza (lato sinistro) è un'espressione regolare. La sostituzione è più o meno solo una stringa letterale (con qualche espansione di barra rovesciata) - non è una regex .

Vuoi traslitterazione, non sostituzione, quindi sostituisci scon y:

echo 34031445 | sed 'y/0123456789/ABCDEFGHIJ/'

sed non può usare range in y, ma Perl può:

echo 34031445 | perl -pe 'y/0-9/A-J/'

O semplicemente usa tr:

echo 34031445 | tr 0-9 A-J

12
Concordato. trè lo strumento più semplice e probabilmente lo più veloce per il lavoro.
sdkks,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.