2011-10-05 115 views
22

我有一個文件r。我想用它替換文字FileMINvac.pdb。我用的命令是:結合2 sed命令

sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r 

sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

我想這兩個sed命令組合成一個,但我不知道的方式。誰能幫忙?

文件看起來像:

-6174.27 File10MINvac.pdb 
-514.451 File11MINvac.pdb 
4065.68  File12MINvac.pdb 
-4708.64 File13MINvac.pdb 
6674.54  File14MINvac.pdb 
8563.58  File15MINvac.pdb 

回答

41

sed是一種腳本語言。用分號或換行符分隔命令。許多sed方言還允許您將每個命令作爲單獨的-e選項參數傳遞。

sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

我還添加了一個反斜槓pdb之前適當引用文本點,但在這有限的背景下,很可能是不重要的。

爲了完整,這裏是換行符變體。許多新手都很困惑,shell允許引用字符串中的字面新行,但它可以方便。

sed -i 's/File//g 
    s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r 

當然,在這有限的情況下,你也可以一切組合成一個正則表達式:

sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r 

(有些sed方言會想這個沒有反斜槓,和/或提供一個選項,使用擴展正則表達式,其中他們應該被省略。BSD sed,並且因此也MacOS的sed,要求強制參數sed -i然而它可以是空的,像sed -i ''.

+0

謝謝你..這個很好用.. – kanika

+0

感謝您使用多個-e標誌,在腳本中每個語句一個。爲'i'命令設置單獨的-e標誌是確保'i'命令在寫入oneliner sed腳本時終止的好方法。 – IllvilJa

19

使用-e標誌:

sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r 

一旦你獲得更多的命令不是很方便與-e s到定義,最好是命令存儲在一個單獨的文件,包括其與-f標誌。

在這種情況下,你會做包含文件:

s/File//g 
s/MINvac.pdb//g 

讓我們把這個文件 'sedcommands'。然後你會先用sed像這樣使用它:

sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r 

只有兩個命令,它可能不值得用命令的一個單獨的文件,但它是很方便,如果你有很多變革之作。

+0

whatis f標誌背後的理念是什麼? – kanika

+2

他當然試圖解釋它。用'-f'你可以把你的腳本放在一個文件中,而不是放在'sed'命令行上。(在這種情況下,它可能不是很有用,但是。) – tripleee