2014-04-11 58 views
0

我想使用Perl一班,匹配多行模式。 我的文件「新」將如下所示。使用perl一個班輪的多行匹配問題

foo 
bar 
foo1 
bar1 
go 

bye 
bar2 

意圖是匹配前四行,即foo和bar1之間。

我一個襯裏如下:

perl -0777 -n -e 'm/^foo.+?bar1/s && print' new 

我讀文件作爲一個整體,而不是一行行用-0777。另外,我給出了/s修飾符來製作「。」也匹配「\ n」。但是,這一班輪船並沒有達到目的。它在這裏匹配enitre文件。

我可能會錯過這裏非常重要的東西。 我可以在這方面得到專家的幫助,因爲這真的讓我很煩惱這麼久了?

回答

1

試試這個:

perl -0777 -n -e 'm/^(foo.+?bar1)/s && print $1' new 

默認情況下,print將輸出$_,而變量的值是在你的情況下,整個文件。

+0

這工作,並感謝您的幫助。 – manus

0

另一種解決辦法是使用範圍..同時還處理由行的文件行:

perl -ne 'print if /^foo$/../^bar1$/' new 

,只要你想,但因爲

  1. 將打印起始於這可能不是完全工作如果不存在bar1,則將foo添加到文件末尾。
  2. 如果foobar1的範圍不止一個,它將打印它們中的每一個。