我正在尝试使用 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 上写了很多答案:
- 模式匹配后删除5行上方和下方4行
- 如何删除文件中特定模式或字符串之后的所有内容?
- grep 文件中的所有行并将行从模式匹配点写入文件
- 如何替换 OS X 上文件夹内所有 .php 文件中的字符?
- 仅当文件末尾尚不存在时,如何在文件末尾追加一些行?
进一步阅读: