Grep

如何跨多行“grep”模式?

  • July 22, 2021

看來我在濫用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為要跨多行匹配的整個表達式。

引用自:https://unix.stackexchange.com/questions/112132