私のコマンドラインに以下を送信します。
find /base/dir1 /base/dir2 -type f -exec /x/y/z/grep -e lolol -e wow {} +
これにより、指定された文字列(lolol
sum)の1つまたは両方を含むwow
各ファイルが返されます。私が望むのは、2つの文字列(ORではなくAND)を含むファイルのみを返すことです。可能であればどうすればよいですか?
編集:検索された文字列は返されたすべてのファイルに表示される必要がありますが、必ず同じ行に表示される必要はありません。
編集2:-rまたは-Rオプションはありません。
答え1
grepの代わりにGNU awkを使用することもできます。
find /base/dir1 /base/dir2 -type f -exec gawk '
FNR == 1 {p1 = p2 = 0}
/lolol/ {p1 = 1}
/wow/ {p2 = 1}
p1 && p2 {print FILENAME; nextfile}
' {} +
答え2
私はこれを行うのと同じ方法が見つからなかったfind
ので、2つのgrepの結果を比較しようとしましたが、これが私が思いついたものです。
comm -12 <(find . -type f -exec grep -l lolol {} + | sort) <(find . -type f -exec grep -l wow {} + | sort)
役に立ったことを願っています!