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

Linux 如何使用sed替换字符串中的多个字符?,linux,sed,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 您可以使用分隔命令,而不是使用多个-e选项在单个参数中 sed 's/a/A/g; s/1/23/g' test.txt > te

我想用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

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

sed 's/a/A/g; s/1/23/g' test.txt > test2.txt

如果您正在寻找一种在一个命令中执行多个替换的方法,我认为没有办法。如果它们都是单字符替换,您可以使用类似于
y/abc/123
的命令,将
a
替换为
1
b
替换为
2
,将
c
替换为
3
。但是没有多字符版本。

除了Barmar的答案之外,您可能希望使用regexp字符类对一个特定字符执行多个字符替换

这里有一个例子来说明问题,试着在使用和不使用
sed
的情况下运行它来感受效果

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


注意:永远不要从安全沙盒之外的陌生人那里运行示例代码

当您有很多字符串要替换时,您可以将它们收集到一个变量中

seds="s/a/A/;"
seds+="s/1/23/;"
echo "That was 1 big party" |
   sed ${seds}

感谢Barmar的支持,这是获得相同结果的最好方法。