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