find + grep은 여러 문자열을 포함하는 파일을 검색합니다.

find + grep은 여러 문자열을 포함하는 파일을 검색합니다.

내 명령줄에 다음을 보냅니다.

find /base/dir1 /base/dir2 -type f -exec /x/y/z/grep -e lolol -e wow {} +

그러면 제공된 문자열( lololsum ) 중 하나 또는 둘 다를 포함하는 wow각 파일이 반환됩니다. 내가 원하는 것은 두 개의 문자열(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때문에 두 grep의 결과를 비교하려고 시도했으며 이것이 내가 생각해낸 것입니다.

comm -12 <(find . -type f -exec grep -l lolol {} + | sort) <(find . -type f -exec grep -l wow {} + | sort)

도움이 되었기를 바랍니다!

관련 정보