grep で OR 検索,AND 検索

OR 検索

grep -e 'pattern1' -e 'pattern2'
grep -e 'pattern1\|pattern2'
grep -E -e 'pattern1|pattern2'

AND 検索

基本的にムリ。

grep -e 'pattern1' | grep -e 'pattern2'

スマートではないが grep の結果を grep するのを何度も繰り返せば出来なくもない。

また,GNU grep は PCRE が利用できるのでそれを使えば

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

と書ける。

grep 以外で AND 検索

AND 検索のときはこっちを使うほうが良さそう。

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

出典

https://unix.stackexchange.com/questions/55359/how-to-run-grep-with-multiple-and-patterns

以上

メモ

PCRE は 1234,1324,1432,1423,2341,... のような {1,2,3,4} の順列にマッチする条件,とかも綺麗に書こうと思えば書けるらしい。マジかよ。 https://stackoverflow.com/questions/3101366/regex-to-match-all-permutations-of-1-2-3-4-without-repetition/3101385#3101385