2016-02-24 186 views
0

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

回答

1

而是多的-e選項,你可以用一個參數將命令與;分開。

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

如果您正在尋找一種方法在單個命令中執行多個替換,我認爲沒有辦法。如果他們都是單字符替換,您可以使用像y/abc/123這樣的命令,這將替換a1,b2c3。但是這沒有多字符版本。

+0

感謝支持Barmar,這是獲得相同結果的最好方法。 – neo33

0

除了Barmar的回答之外,您可能還想使用正則表達式字符類對一個特定的字符替換執行幾個字符。

這裏的澄清的事情,嘗試與運行的例子,沒有sed感覺效果

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

附:絕對不要在安全沙箱外面運行陌生人的示例代碼

0

當您有很多替換字符串時,可以將它們收集在一個變量中。

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