Grep

如何使用多個 AND 模式執行 grep?

  • March 10, 2022

我想通過模式之間的隱式AND來獲得多模式匹配,即相當於在一個序列中執行多個 grep:

grep pattern1 | grep pattern2 | ...

那麼如何將其轉換為類似的東西?

grep pattern1 & pattern2 & pattern3

我想使用單個 grep,因為我正在動態建構參數,所以所有內容都必須適合一個字元串。使用過濾器是系統功能,而不是 grep,所以它不是它的論據。


不要將此問題與以下內容混淆:

grep "pattern1\|pattern2\|..."

這是一個OR多模式匹配。我正在尋找AND模式匹配。

要找到與模式列表中的每一個匹配的行,agrep(原始的,現在與glimpse一起提供,而不是TRE regexp library中不相關的行)可以使用以下語法來完成:

agrep 'pattern1;pattern2'

使用 GNU grep,當使用 PCRE 支持建構時,您可以執行以下操作:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

astgrep

grep -X '.*pattern1.*&.*pattern2.*'

(將.*s 添加為<x>&<y>匹配既匹配<x><y> 完全匹配的字元串,a&b永遠不會匹配,因為沒有這樣的字元串可以同時匹配)。a``b

如果模式不重疊,您也可以這樣做:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

awk如前所述,最好的便攜方式可能是:

awk '/pattern1/ && /pattern2/'

或與sed

sed -e '/pattern1/!d' -e '/pattern2/!d'

或者perl

perl -ne 'print if /pattern1/ && /pattern2/'

請注意,所有這些都將具有不同的正則表達式語法。

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