带有捕获组的Perl正则表达式不工作

yqkkidmi  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(158)

我有以下文件:

/Users/x/-acite _1660475490N.html
/Users/x/-acite _1660464772N.html
/Users/x/-acite _1660464242N.html
/Users/x/-acite _1660463321N.html
/Users/x/-acite _1660421444N.html
/Users/x/-acite _1612414441N.html

/Users/x/fix _1660399672N.html
/Users/x/fix _1660398829N.html

/Users/x/water witching _1660460617N.html
/Users/x/water witching _1660388149N.html
/Users/x/water witching _1632222441N.html
/Users/x/water witching _1660003224N.html

我需要

/Users/x/-acite _1660475490N.html
/Users/x/fix _1660399672N.html
/Users/x/water witching _1660460617N.html

我使用下面的perl正则表达式:

find . -type f -exec perl -pi -w -e 's/(.*)(\R)(.*)(\R)/$1$2/' \{\} \;

find . -type f -exec perl -pi -w -e 's/(.*?)(\R)(.*?)(\R)/$1$2/g;' \{\} \;

为什么这些不起作用?

omqzjyyz

omqzjyyz1#

此外,您可以在paragraph模式下读取(-00),并匹配和打印每个“paragraph”的第一行。

C:\Old_Data\perlp>perl -00 -ne "print /(.+\n)/" test01.txt
/Users/x/-acite _1660475490N.html
/Users/x/fix _1660399672N.html
/Users/x/water witching _1660460617N.html

请注意,这是在PC上运行的,并且在语句中使用了双引号(“)。在 *nix计算机上,将使用单引号(')。

bwntbbo3

bwntbbo32#

你是

  • 而不是将整个文件变成一个字符串
  • 仅替换第一个匹配项
  • 并且您不需要那么多组,您只需要一个组,因为您希望保留匹配的一部分。

您需要

find . -type f -exec perl -0777 -i -pe 's/^(.+)(?:\R.+)*\n/$1/gm' \{\} \;

在这里,

  • -0777抓取文件
  • ^-行的开始(由于m标志)
  • (.+)-匹配非空行
  • (?:\R.+)*-零个或多个换行符序列和非空行
  • \n-匹配换行符

相关问题