在多行中使用 Perl 正则表达式

在多行中使用 Perl 正则表达式

我想替换文件中所有出现的这个内容:

ab
ba

有了这个:

a a

我尝试了显而易见的方法:

$ perl -i -p -e 's/ab\nba/a a/' file.txt

没有成功。这是怎么做到的?

我找不到任何可以正确表达这个问题的问题。

答案1

如果不带任何其他选项,-p则逐行处理输入。 之后的任何行都不能包含任何内容\n。 您必须更改记录分隔符:

perl -i~ -0pe 's/ab\nba/a a/' file.txt
  • -i~将“就地”修改文件,并留下一个备份(名为file.txt~
  • -0使该字符成为\0输入记录分隔符。重要的是,该字符不会出现在要替换的字符串中,因此它永远不会只读取其中的一部分。
  • -p逐条读取文件记录,读取完每条记录后,运行代码并打印默认变量$_
  • -e仅介绍代码。

相关内容