web-dev-qa-db-ja.com

[0-9]を[A-J]に置き換えるとsedが機能しない

私はすべての数字0-9を対応するsedの文字で置き換えるコマンドに取り組んでいます。私は何か間違っていることを知っていますが、sedは置換正規表現を文字列リテラル以外のものとして解釈していません。

私が使用しているコマンドはsed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

それは私にはかなり簡単に思えますが、私はそれについて約1時間行き詰っています。受け取った出力は、0-9を文字列 "[A-J]"に置き換えます。

11
Matthew Snell

代わりに、match(左側)のみが正規表現です。 replacementは、多かれ少なかれ単なるリテラル文字列(バックスラッシュ展開を伴う)です。それは正規表現ではないです。

置換ではなく音訳が必要なため、syに置き換えます。

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

sedはyで範囲を使用できませんが、Perlは次のことができます。

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

または、単にtrを使用します。

echo 34031445 | tr 0-9 A-J
38
choroba