我正在尝试替换文件中的字符串,但我的过程似乎是删除字符串而不是用我想要的替换它
实施例
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
但是我得到了权限错误,所以编辑到位是不行的
答案 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