用 [AJ] 替换 [0-9] 不适用于 sed

Mat*_*ell 10 linux bash regex sed command-line

我正在处理一个命令,该命令将 sed 中的所有数字 0-9 替换为其相应的字母。我知道我做错了什么,但 sed 并没有将替换正则表达式解释为字符串文字以外的任何东西。

我正在使用的命令是 sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

这对我来说似乎很简单,但我已经坚持了大约一个小时。我收到的输出只是用字符串“[AJ]”替换了 0-9

cho*_*oba 37

在替换中,只有匹配项(左侧)是正则表达式。该更换或多或少只是一个字符串(有一些反斜杠扩展) -这是不是一个正则表达式

你想要音译,而不是替换,所以替换sy

echo 34031445 | sed 'y/0123456789/ABCDEFGHIJ/'
Run Code Online (Sandbox Code Playgroud)

sed 不能在 中使用范围y,但 Perl 可以:

echo 34031445 | perl -pe 'y/0-9/A-J/'
Run Code Online (Sandbox Code Playgroud)

或者只是使用tr

echo 34031445 | tr 0-9 A-J
Run Code Online (Sandbox Code Playgroud)

  • 同意。`tr` 是最简单,也可能是完成这项工作最快的工具。 (12认同)