为何perl -0pe中.$\n^正则不生效,.\n^却可行?
问题原因解析
第二个命令匹配失败和-0参数没关系,纯粹是你写错了正则表达式:
先说说
-0的作用-0会让Perl把整个输入文件一次性读成一个字符串,而非默认的逐行读取。配合正则的m(multiline)修饰符时,^会匹配字符串里每个换行后的位置(行首),$匹配每个换行前的位置(行尾)——这也是第一个命令能正常工作的原因:.\n^text刚好匹配了文件里a\ntext这段内容(.匹配a,\n匹配换行,^text匹配下一行开头的text)。第二个命令的问题出在哪
你在正则里写了.\$\n^text,但Perl的单引号字符串里,\$不会被解析成正则的行尾断言,而是直接当作普通的$字符来处理。你的测试文件里根本没有$字符,自然找不到匹配的内容。为什么regex101测不出来差异
大概率是你在regex101里用的是正确的.$\n^text(没给$加反斜杠),但命令行里误加了反斜杠,两边正则表达式不一致,结果当然不同。
修正后的命令
如果你的需求是匹配“某行最后一个字符+换行+下一行开头的text”,去掉$前的反斜杠即可:
cat test.txt | perl -0pe 's/.$\n^text/hellohello/smg'
内容的提问来源于stack exchange,提问作者Signor Pizza
相关产品推荐
相关产品推荐

