我正在尝试使用Perl one liner,以匹配多线模式。 我的文件" new"看起来像下面的东西。
foo
bar
foo1
bar1
go
bye
bar2
意图是匹配前四行,即foo和bar1之间的行。
我的一个班轮如下:
perl -0777 -n -e 'm/^foo.+?bar1/s && print' new
我正在使用-0777
整体阅读文件,而不是逐行阅读。另外,我已经使用/s
修饰符来制作"。"匹配" \ n"也。但是这一个班轮没有达到目的。它匹配enitre文件。
我可能会遗漏一些非常基本的东西。 我能否得到专家的帮助,因为这长期以来让我感到很烦恼?
答案 0 :(得分:1)
试试这个:
perl -0777 -n -e 'm/^(foo.+?bar1)/s && print $1' new
默认情况下,print
将输出$_
,并且该变量的值是您案例中的整个文件。
答案 1 :(得分:0)
另一种解决方案是使用范围..
,同时仍然逐行处理文件:
perl -ne 'print if /^foo$/../^bar1$/' new
这可能无法完全按照您的意愿运作,因为
foo
,它将从bar1
开始打印到文件末尾。foo
到bar1
的范围不止一个,则会打印每个范围。