我有一个文件r
。我想用其中的任何内容替换File
和MINvac.pdb
中的单词。我使用的命令是
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
答案 0 :(得分:55)
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 {{1} },要求sed
的强制性参数,但可以是空的,如sed -i
)
答案 1 :(得分:24)
使用-e
标志:
sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r
一旦获得的命令多于方便用-e
定义的命令,最好将命令存储在单独的文件中,并将其包含在-f
标志中。
在这种情况下,您将创建一个包含以下内容的文件:
s/File//g
s/MINvac.pdb//g
让我们将该文件命名为“sedcommands”。然后你就像这样使用sed:
sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r
只使用两个命令,使用单独的命令文件可能不值得,但如果要进行大量转换,则非常方便。