如何使用 sed 替换字符串中的多个字符?

neo*_*o33 7 linux sed

我想用 sed 替换字符串的一些字符。

我尝试了以下两种方法,但我需要知道是否有更优雅的形式来获得相同的结果,而不使用管道或-e选项:

sed 's#a#A#g' test.txt | sed 's#l#23#g' > test2.txt
sed -e 's#a#A#g' -e 's#l#23#g' test.txt > test2.txt
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 12

-e您可以;使用单个参数来分隔命令,而不是多个选项。

sed 's/a/A/g; s/1/23/g' test.txt > test2.txt
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找一种在单个命令中进行多次替换的方法,我认为没有办法。如果他们都是单字符替换,你可以使用像这样的命令y/abc/123,将取代a1b2,并c3。但是没有这个的多字符版本。


小智 7

除了 Barmar 的答案之外,您可能还想使用 regexp 字符类来执行多个字符到一个特定字符的替换。

这是一个澄清事情的例子,尝试运行它和不运行它sed来感受效果

echo -e 'abc\ndef\nghi\nklm' | sed 's/[adgk]/1/g; s/[behl]/2/g; s/[cfim]/3/g'

PS 永远不会在安全沙箱之外运行陌生人的示例代码

  • + 对于你的 PS ...我想补充一点:在不了解你在做什么的情况下永远不要运行示例代码:D (2认同)