2013-02-17 19 views
4

我試圖到grep用於文本之間的表達式(比如BEGINEND)可能不與在同一行:使用perl作爲一個更好的grep用於匹配多行單線模式m/RE /秒

perl -wln -e 'm/BEGIN.+END/s and print;' < file.txt 

注意,因爲s修飾符(在m/RE/s)的,"."允許匹配換行符(與別的一起)。

這樣,模式可以將特定順序中的單詞與它們之間的任何內容相匹配(即模式BEGIN在一行上,而模式END在下面幾行上)。 如果兩個模式在同一條線上,這可以正常工作,但不能跨越多條線。我在這裏錯過了什麼?

回答

6

其實我找出了缺失的部分!我需要使用-0777選項在整個文件上記錄搜索和使用print $&,而不是打印匹配的表達式:

perl -wln -0777 -e 'm/BEGIN.+END/s and print $&;' < file.txt 
+0

將使其儘快做,因爲它不會允許我這樣(在兩天) – 2013-02-17 21:55:08