【发布时间】:2016-06-07 10:22:06
【问题描述】:
我想用 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
【问题讨论】:
我想用 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
【问题讨论】:
当你有很多要替换的字符串时,你可以将它们收集到一个变量中。
seds="s/a/A/;"
seds+="s/1/23/;"
echo "That was 1 big party" |
sed ${seds}
【讨论】:
除了 Barmar 的回答之外,您可能还想使用正则表达式字符类来执行几个字符到一个特定字符的替换。
这是一个澄清事情的例子,尝试在有和没有sed的情况下运行它来感受效果
echo -e 'abc\ndef\nghi\nklm' | sed 's/[adgk]/1/g; s/[behl]/2/g; s/[cfim]/3/g'
附:永远不要在安全沙箱之外运行来自陌生人的示例代码
【讨论】:
您可以在单个参数中使用; 分隔命令,而不是多个-e 选项。
sed 's/a/A/g; s/1/23/g' test.txt > test2.txt
如果您正在寻找一种在单个命令中进行多次替换的方法,我认为没有办法。如果它们都是单字符替换,您可以使用类似y/abc/123 的命令,它将a 替换为1,将b 替换为2,将c 替换为3。但没有多字符版本。
【讨论】: