Perl - 如何从文件中grep一段文本

dre*_*mer 1 perl grep

它可以是XML或任何文本格式.一般来说如何grep Perl中的文本块?

<track type="ws">
      <range>
       <rangeStart>0</rangeStart>
       <rangeEnd>146.912</rangeEnd>
       <locationIndex>0</locationIndex>
       <propertyIndex>0</propertyIndex>
      </range>
</track>
<track type="ps" id="1">
      <range>
       <rangeStart>0</rangeStart>
       <rangeEnd>146.912</rangeEnd>
       <locationIndex>1</locationIndex>
       <propertyIndex>1</propertyIndex>
      </range>
</track>
Run Code Online (Sandbox Code Playgroud)

我想要type="ps"抓住并获得一切,直到</range>.

一种解决方案是打开文件,逐行读取,然后匹配块.

open(FH, "file.txt");
foreach $line (<FH>) {
    if ($line =~ m/type="cc"(.*?)<\/range>/) {
        print $1;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果没有逐行读取文件,是否有更优化的解决方案?

Chr*_*zig 5

Bjørn绝对适合XML.对于更一般的问题,您可能也对我最喜欢的每个单行中的一个感兴趣:

perl -ne 'print if /type="cc"/../<\/range>/' input.txt
Run Code Online (Sandbox Code Playgroud)