Perl搜索并替换NOT工作

时间:2013-04-17 22:43:08

标签: regex windows perl

我正在尝试替换文件中的字符串,但我的过程似乎是删除字符串而不是用我想要的替换它

实施例

perl -ne 'print unless s/ServerIp=${Solid.host}/ads/;' needsToBeReplaced.prp > blah.txt

将删除

“ServerIp = $ {Solid.host}”并将该行留空而不是在其位置打印“广告”

我顺便在Windows上运行。此外,我在正则表达式中没有第三个参数,因为我只想更改第一个匹配项。我也试过

perl -pi -e 's/ServerPort=${Solid.port}/ads/;' needsToBeReplaced.txt 

但是我得到了权限错误,所以编辑到位是不行的

2 个答案:

答案 0 :(得分:6)

仅在替换不成功时才打印该行。如果您想要始终打印,请不要使用unless

perl -pe "s/ServerIp=\${Solid.host}/ads/;" needsToBeReplaced.prp > blah.txt

你也应该逃避美元符号以防止它被Perl解释。

另请注意,必须在MS Windows上使用双引号。

答案 1 :(得分:0)

根据你现在所拥有的,如果替代成功,它将返回一个真值,这意味着unless将为真,这意味着什么都不会打印出来。你可以这样做:

perl -ne 's/ServerIp=${Solid.host}/ads/; print;' needsToBeReplaced.prp > blah.txt