组合两个 sed 命令

问题描述 投票:0回答:2

我有一个文件

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
sed
2个回答
104
投票

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


51
投票

使用

-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

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

© www.soinside.com 2019 - 2024. All rights reserved.