2011-10-05 62 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