一次调用sed即可进行多次编辑


16

我正在尝试使用sed编辑配置文件。我想更改几行。我知道Linux下sed -i允许进行就地编辑,但是它要求您保存到备份文件中。但是,我想避免有多个备份文件,并立即进行所有更改。

有没有办法做到这一点,sed -i还是有更好的选择?

Answers:


22

您可以sed通过重复执行-e(或-f脚本是否在文件中)告诉执行多项操作。

sed -i -e 's/a/b/g' -e 's/b/d/g' file在名为的单个文件中进行两个更改file。没有备份文件。

sed -ibak -e 's/a/b/g' -e 's/b/d/g' file在名为的单个文件中进行两个更改file。带有一个名为的备份文件filebak


2
请注意,顺序很重要。在上面给出的示例命令中,将字母的所有实例a都转换成b然后将的所有实例b都转换成d。您可以使用sed -i -e 's/a\|b/d/g' file—将a或的所有实例b转换为来做同样的事情d
通配符

4

另一个选择是ex,的前身vi。实际上它是就地脚本文件编辑的首选POSIX工具。它sed -i比Perl 异常灵活,甚至可以说比Perl更便携。(如果您不使用Windows,那么它无疑比Perl更可移植。)

有在该例子stackexchange命令的相对缺乏使用ex,至少与实施例的命令的使用过多相比sedawk和Perl。但是,我本人已经深入研究了POSIX规范,ex从那时起,我一直在为此努力。我在ex这里和在vi / Vim stackexchange上都写了很多答案:

进一步阅读:


3

除了使用多个-e选项外,还可以使用换行符或分号在单个sed脚本中分隔sed命令。

无论该脚本是命令行上的单行脚本还是脚本文件,都是这种情况。

例如

sed -e 's/a/b/g ; s/b/d/g' file

周围的空格字符;是可选的。我在这里使用它们来确保分号突出(一般来说,除了换行符分隔命令外,命令之间的空格会被忽略...但是请不要忘记命令内的空格可以并且通常是重大)。

要么:

sed -e 's/a/b/g
        s/b/d/g' file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.