我想用 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,将取代a有1,b有2,并c用3。但是没有这个的多字符版本。
小智 7
除了 Barmar 的答案之外,您可能还想使用 regexp 字符类来执行多个字符到一个特定字符的替换。
这是一个澄清事情的例子,尝试运行它和不运行它sed来感受效果
echo -e 'abc\ndef\nghi\nklm' | sed 's/[adgk]/1/g; s/[behl]/2/g; s/[cfim]/3/g'
PS 永远不会在安全沙箱之外运行陌生人的示例代码