2013-05-22 146 views
4

我想用文字替換文件中某些字符的所有出現。我的問題是,我可以使用單個命令對所有字符執行此操作嗎?我使用下面的命令用於與替換「A」的每次出現「蘋果」unix找到並替換多個字符的字符串

sed 's/a/apple/g' sample.txt 

我不想寫3個或4類似的命令,以取代「B」,「C」的每次出現, 'd'用一些詞語。有什麼方法可以擴展上述命令以滿足我的需要,還是我需要使用相同的三次?

+0

要小心,當你在更換'e'字符,因爲它會影響'apple'了'e'以及。您可能需要調查sed的正則表達式功能,特別是「字邊界」字符。 – Intermernet

+0

@Intermernet你認爲我在這種情況下做什麼?我還注意到,使用我提到的命令,我在終端中獲得了替換的輸出,但文件內容未被修改。 – noobcoder

+0

查看'sed -i'。它應該允許就地修改,但有時危險!先複製文件! – Intermernet

回答

3

您可以在sed輸入多個命令使用-e開關這樣的:

sed -i.bak -e 's/a/apple/g' -e 's/b/bat/g' -e 's/c/cat/g' 
+0

這聽起來不錯。但是它實際上是修改文件的內容還是僅僅將它顯示在終端上?對我使用sed命令只是在終端顯示更改,但當我打開文件時,我看到舊的未修改的內容 – noobcoder

+0

我已添加'-i.bak'標誌以啓用內聯編輯,這將將更改保存在文件中本身。 – anubhava

+0

這工作完美。但是,.bak作爲備份文件嗎?如果是這樣,它什麼時候有用?我不能簡單地使用sed -i -e's/a/apple/g'等嗎? – noobcoder