我想在示例的第二行更改'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
答案 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评论的s
和m
修饰符的更详细说明,请参阅http://perldoc.perl.org/perlre.html。出于实际目的,s
&#34;将[s]字符串视为单行&#34;。