组合两个sed命令

组合两个sed命令,sed,Sed,我有一个文件r。我想将其中的单词File和MINvac.pdb替换为空。我使用的命令是 sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r 及 我想将两个sed命令合并为一个命令,但我不知道该怎么做。有人能帮忙吗 该文件如下所示: -6174.27 File10MINvac.pdb -514.451 File11MINvac.pdb 4065.68 File12MINvac.pdb -4708.64

我有一个文件
r
。我想将其中的单词
File
MINvac.pdb
替换为空。我使用的命令是

sed -i 's/File//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
sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r

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'.

使用
-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一起使用,如下所示:

-6174.27    File10MINvac.pdb
-514.451    File11MINvac.pdb
4065.68     File12MINvac.pdb
-4708.64    File13MINvac.pdb
6674.54     File14MINvac.pdb
8563.58     File15MINvac.pdb
sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r

由于只有两个命令,可能不值得使用单独的命令文件,但如果要进行大量转换,则使用起来非常方便

f旗背后的想法是什么?他当然想解释一下。使用
-f
可以将脚本放在文件中,而不是放在
sed
命令行中。(在本例中,它可能不是很有用。)感谢您提供关于使用多个-e标志的提示,脚本中的每个语句都有一个-e标志。为'i'命令使用单独的-e标志是一种很好的方法,可以确保在编写一行sed脚本时终止'i'命令。另请参见将其扩展到处理替换对列表的操作。