我正在尝试使用 sed 来编辑配置文件。有几行我想更改。我知道在 Linux 下sed -i
允许就地编辑,但它需要您保存到备份文件。但是,我想避免拥有多个备份文件并立即进行所有就地更改。
有没有办法做到这一点,sed -i
或者有更好的选择吗?
Eig*_*ony 41
您可以sed
通过重复-e
(或者-f
如果您的脚本在文件中)来告诉执行多个操作。
sed -i -e 's/a/b/g' -e 's/b/d/g' file
在名为file
, in-place的单个文件中进行这两项更改。没有备份文件。
sed -ibak -e 's/a/b/g' -e 's/b/d/g' file
在名为file
, in-place的单个文件中进行这两项更改。使用名为filebak
.
除了使用多个-e
选项,您还可以使用换行符或分号在单个 sed 脚本中分隔 sed 命令。
无论该脚本是命令行上的单行还是脚本文件,情况都是如此。
例如
sed -e 's/a/b/g ; s/b/d/g' file
Run Code Online (Sandbox Code Playgroud)
周围的空格字符;
是可选的。我在这里使用它们来确保分号突出(通常,除了换行符分隔命令,命令之间的空格被忽略......但不要忘记命令中的空格可以并且通常是重大)。
或者:
sed -e 's/a/b/g
s/b/d/g' file
Run Code Online (Sandbox Code Playgroud)
另一种选择是ex
,前身到vi
. 它实际上是就地脚本文件编辑的首选 POSIX 工具;它sed -i
比 Perl更加灵活,甚至可以说比 Perl 更加便携。(如果您不在 Windows 世界中,它无疑比 Perl 更具可移植性。)
有在该例子stackexchange命令的相对缺乏使用ex
,至少与实施例的命令的使用过多相比sed
,awk
和Perl。然而,我自己已经深入研究了POSIX 规范,ex
从那以后我一直在为它打鼓。我在ex
这里和 vi/Vim stackexchange 上都写了很多答案:
进一步阅读: