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

1444
Matthew Snell

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 Regex nicht als etwas anderes als ein String-Literal.

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

Es erscheint mir ziemlich unkompliziert, aber ich bin seit ungefähr einer Stunde dran. Die Ausgabe, die ich erhalte, ersetzt 0-9 durch die Zeichenfolge "[AJ]".

11

1 Antwort auf die Frage

38
choroba

Bei der Substitution ist nur der Treffer (linke Seite) ein regulärer Ausdruck. Der Ersatz ist mehr oder weniger nur eine wörtliche Zeichenfolge (mit etwas Backslash-Erweiterung) - es ist keine Regex .

Sie möchten Transliteration, nicht Substitution, ersetzen Sie diese smit y:

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

sed kann keine Bereiche verwenden y, aber Perl kann:

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

Oder benutzen Sie einfach tr:

echo 34031445 | tr 0-9 A-J 
Einverstanden. "tr" ist das einfachste und wahrscheinlich schnellste Werkzeug für diesen Job. sdkks vor 5 Jahren 12