Grep
如何使用多個 AND 模式執行 grep?
我想通過模式之間的隱式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)'
與ast
grep
: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/'
請注意,所有這些都將具有不同的正則表達式語法。