regex - Perl 多行匹配问题

标签 regex perl

我正在尝试使用 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/

相关文章:

javascript - 从 Javascript 中的正则表达式匹配中排除单词数组

javascript - 允许某些特殊字符,但必须是字母数字

javascript - 使用 Minecraft 控制台和 Nodejs 进行正则表达式

r - 使用 gsub 插入反斜杠

perl - 如何在 perlbrew 中显示所有可用的 perls?

perl - 在哪里可以找到面向对象的 Perl 教程?

html - Perl 脚本从字面上打印 http header 而不是理解它们

php用一个空格替换多个空格

perl - 使用 Perl 检测操作系统类型

javascript - 使用perl在cgi中显示进度条