Ersetzen von [0-9] durch [AJ] funktioniert nicht mit sed

11

Ich arbeite an einem Befehl, der alle Ziffern 0-9 durch die entsprechenden Buchstaben in sed ersetzt. Ich weiß, dass ich etwas falsch mache, aber sed interpretiert den Ersatz-Regex nicht als etwas anderes als ein String-Literal.

Der Befehl, den ich benutze, ist sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Es scheint mir ziemlich einfach zu sein, aber ich bin seit ungefähr einer Stunde daran festgehalten. Die Ausgabe, die ich erhalte, ersetzt nur 0-9 durch die Zeichenfolge "[AJ]".

Matthew Snell
quelle

Antworten:

38

Bei der Substitution ist nur die Übereinstimmung (linke Seite) ein regulärer Ausdruck. Der Ersatz ist mehr oder weniger nur eine wörtliche Zeichenfolge (mit einer gewissen Backslash-Erweiterung) - es ist kein regulärer Ausdruck .

Sie möchten Transliteration, keine Substitution, also ersetzen Sie sdurch y:

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

sed kann keine Bereiche in verwenden y, aber Perl kann:

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

Oder verwenden Sie einfach tr:

echo 34031445 | tr 0-9 A-J
Choroba
quelle
12
Einverstanden. trist das einfachste und wahrscheinlich schnellste Werkzeug für den Job.
SDKKS