sed 内联和扩展正则表达式不能一起工作

sed 内联和扩展正则表达式不能一起工作

我正在尝试在 macOS 10.14.3 (18D109) 上使用 sed 替换扩展正则表达式。如果我不使用扩展正则表达式,则内联标志有效,否则它不会更新文件,但是如果没有 -i 标志,它会将正确的结果打印到控制台。为什么会发生这种情况,我该如何解决?

$ echo "foo" > foo.txt
$ sed -i -E 's/fo{1,}/123123/g' ./foo.txt

什么都没发生。

$ sed -E 's/fo{1,}/123123/g' ./foo.txt
123123

答案1

当用于sed就地编辑文档时(使用sed支持此功能的实现),控制台中不会有任何输出。该文件将根据编辑脚本进行转换。

$ echo "foo" >foo.txt
$ sed -i -E 's/fo{1,}/123123/g' ./foo.txt
$ cat foo.txt
123123

在 FreeBSD 和 macOS 上,-i所提供的sed实现的标志与 GNU 具有不同的语义sed,并且您的命令将创建一个名为foo.txt-E原始文件备份的文件(-E因此该选项不会达到预期效果)。使用-i备份后缀,执行以下操作:

sed -i '' -E ...

FreeBSD/macOS 上的示例:

$ echo "foo" >foo.txt
$ sed -i '' -E 's/fo{1,}/123123/g' ./foo.txt
$ cat foo.txt
123123

有关的:

相关内容