Perl正则表达式启动线锚失败

时间:2015-09-11 15:30:02

标签: regex perl

我想在示例的第二行更改'this',但它没有发生。非常感谢我出错的想法。

echo "not this but
this one" > test.txt
perl -0777 -i -pe 's/^this/rhinoceros/igs' test.txt
cat test.txt
not this but
this one

2 个答案:

答案 0 :(得分:5)

您的替换上有所有错误的修饰符。您可能只想进行一次更改,因此/g是不必要的;要匹配的文字正好是this,因此/i是不必要的,并且您的模式中没有点.个字符,因此/s不执行任何操作< / p>

需要的是/m(多行)修饰符,以便^匹配字符串中间的行的开头,以及就在字符串的开头

这应该对你有用

perl -0777 -i -pe 's/^this/rhinoceros/m' test.txt

答案 1 :(得分:1)

您正在使用/ s标志,您实际上需要/ m标志。

perl -0777 -i -pe 's/^this/rhinoceros/igm' test.txt

s将整个字符串视为一行,而m则匹配多行。

修改:有关@ThisSuitIsBlackNot评论的sm修饰符的更详细说明,请参阅http://perldoc.perl.org/perlre.html。出于实际目的,s&#34;将[s]字符串视为单行&#34;。