结合两个sed命令

kan*_*ika 35 sed

我有一个文件r.我想更换的话File,并MINvac.pdb在里面什么也没有.我使用的命令是

sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

我想将两个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
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 60

sed是一种脚本语言.用分号或换行符分隔命令.许多sed方言还允许您将每个命令作为单独的-e选项参数传递.

sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

我之前添加了一个反斜杠来正确引用文字点pdb,但在这个有限的上下文中可能并不重要.

为了完整起见,这是换行符.许多新手感到困惑,shell允许引用字符串中的文字换行符,但它可以很方便.

sed -i 's/File//g
    s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

当然,在这种有限的情况下,您还可以将所有内容组合成一个正则表达式:

sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

(有些sed方言会想要这个没有反斜杠,和/或提供一个使用扩展正则表达式的选项,它们应该被省略.BSD sed,也就是MacOS sed,要求一个强制参数sed -i,但是它可以是空的,比如sed -i ''.)


Mic*_*ber 28

使用-e标志:

sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

一旦获得的命令多于方便用-es 定义的命令,最好将命令存储在单独的文件中并将其包含在-f标志中.

在这种情况下,您将创建一个包含以下内容的文件:

s/File//g
s/MINvac.pdb//g
Run Code Online (Sandbox Code Playgroud)

我们称该文件为"sedcommands".然后你就像这样使用sed:

sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r
Run Code Online (Sandbox Code Playgroud)

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

  • 他当然试图解释它.使用`-f`,您可以将脚本放在文件中,而不是放在`sed`命令行中.(在这种情况下,它可能不是很有用.) (4认同)