通过一次调用 sed 进行多次编辑

通过一次调用 sed 进行多次编辑

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

有没有办法做到这一点sed -i或者有更好的选择吗?

答案1

您可以通过重复(或者如果您的脚本位于文件中) sed来执行多个操作。-e-f

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

sed -ibak -e 's/a/b/g' -e 's/b/d/g' file在名为 , in-place 的单个文件中进行这两项更改file。使用名为filebak.

答案2

除了使用多个-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

答案3

另一种选择是ex,前身为vi.它实际上是用于就地脚本文件编辑的首选 POSIX 工具;它比 Perl 更加灵活,sed -i甚至可以说比 Perl 更加可移植。 (如果你远离 Windows 世界,那就是无可争辩地比 Perl 更便携。)

ex至少与大量使用sed、和 Perl 的示例命令相比,此堆栈交换中使用 的示例命令相对缺乏awk。然而,我本人已经深入研究了POSIX 规范ex从那时起我就一直在为此鼓劲。我ex在这里和 vi/Vim stackexchange 上写了很多答案:

进一步阅读:

相关内容