我正在尝试使用 Perl 单行代码来更新一些跨多行的代码,并且看到一些奇怪的行为。这是一个简单的文本文件,显示了我遇到的问题:
ABCD START
STOP EFGH
我期望以下内容能够工作,但它最终并没有取代任何东西:
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
经过一些实验,我发现\s+
原始正则表达式中的将匹配换行符,但不匹配第二行上的任何空格,并添加第二个 \s+
也不行。因此,现在我正在执行以下解决方法,即添加一个仅删除换行符的中间正则表达式:
perl -pi -e 's/START\s+/START/s' input.txt
这将创建以下中间文件:
ABCD START STOP EFGH
然后我可以运行原始正则表达式(尽管不再需要 /s
):
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
这将创建最终所需的文件:
ABCD REPLACE EFGH
看来中间步骤应该没有必要。我错过了什么吗?
最佳答案
你很接近。您需要 -00
或 -0777
:
perl -0777 -pi -e 's/START\s+/START/' input.txt
关于regex - Perl 多行匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862461/