Perl搜索并替换NOT工作

use*_*905 -1 regex windows perl

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

perl -ne 'print unless s/ServerIp=${Solid.host}/ads/;' needsToBeReplaced.prp > blah.txt
Run Code Online (Sandbox Code Playgroud)

将删除

"ServerIp = $ {Solid.host}"并将该行留空,而不是在其位置打印"ads"

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

perl -pi -e 's/ServerPort=${Solid.port}/ads/;' needsToBeReplaced.txt 
Run Code Online (Sandbox Code Playgroud)

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

cho*_*oba 6

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

perl -pe "s/ServerIp=\${Solid.host}/ads/;" needsToBeReplaced.prp > blah.txt
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您还应该转义美元符号以防止替换运算符进行插值.几乎可以肯定OP意味着使用`$ {Solid.host}`作为文字字符串,而不是作为变量`$ Solidhost`的值的引用. (2认同)