我正在尝试在 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
有关的: