在OS X上使用sed进行就地编辑

时间:2016-11-13 23:38:25

标签: macos perl sed

我在Stack溢出上看到了多个帖子,并提供了解决此问题的各种解决方案。我尝试了各种版本的发布解决方案,但我无法让它工作。

我正在写一个我想要的perl脚本

New max size: xUL: 0 yUL: 0 x: 0 y 0 size: 1 New max size: xUL: 0 yUL: 0 x: 0 y 1 size: 2 New max size: xUL: 1 yUL: 1 x: 1 y 3 size: 3 New max size: xUL: 1 yUL: 2 x: 2 y 3 size: 4 New max size: xUL: 1 yUL: 2 x: 3 y 3 size: 6

我尝试了各种不同的组合(即 my $fileName = "apple"; my $newName = "banana"; my $ tmpPath = "/etc/ria"; ["/usr/bin/sed","-i ''", "s/${fileName}/${newName}/g", $tmpPath]
["/usr/bin/sed","-i''", "s/${fileName}/${newName}/g", $tmpPath]
["/usr/bin/sed","-i", '\'\', "s/${fileName}/${newName}/g", $tmpPath]

然而,每次我运行它,它会创建ria& RIA'。 我不想要第二个文件,ria''。

这不能完成吗?或者我可以使用其他编辑器吗?我不想在我的Mac上安装任何东西(即gsed)。

我将其作为["/usr/bin/sed","-i", '\'\', '-e', "s/${fileName}/${newName}/g", $tmpPath]运行。

1 个答案:

答案 0 :(得分:1)

sed -i '' ...做的是传递" -i"作为参数,后跟零长度参数(空引号)。单引号不是参数的一部分,它们只是表示存在一个参数(它没有任何内容)。要使用system在perl中执行相同的操作,请使用:

["/usr/bin/sed", "-i", "",  "s/${fileName}/${newName}/g", $tmpPath]