Grep
如何跨多行“grep”模式?
看來我在濫用
grep
/egrep
。我試圖在多行中搜尋字元串並且找不到匹配項,而我知道我要查找的內容應該匹配。最初我認為我的正則表達式是錯誤的,但我最終讀到這些工具是按行操作的(我的正則表達式也是如此微不足道,不可能成為問題)。
那麼使用哪種工具來搜尋多行模式呢?
這是一個可以跨多行為
sed
您提供類似行為的方法:grep
sed -n '/foo/{:start /bar/!{N;b start};/your_regex/p}' your_file
這個怎麼運作
-n
禁止列印每一行的預設行為/foo/{}
指示它匹配foo
並執行匹配線內的波浪線。替換foo
為模式的起始部分。:start
是一個分支標籤,可幫助我們繼續循環,直到找到正則表達式的結尾。/bar/!{}
將對不匹配的行執行 squigglies 中的內容bar
。替換bar
為模式的結束部分。N
將下一行附加到活動緩衝區(sed
稱為模式空間)b start
將無條件地分支到start
我們之前創建的標籤,以便只要模式空間不包含bar
./your_regex/p
如果匹配,則列印模式空間your_regex
。您應該替換your_regex
為要跨多行匹配的整個表達式。