GNU grep
두 번째 grep
는 파일 목록에서 작동 할 수 있습니다.
grep -lZ "foo" * | xargs -0 grep -l "321"
POSIX grep with find
find
는 재귀 디렉토리를 검색하려는 경우 더 유용합니다 (이 경우 -mindepth
및 -maxdepth
옵션.
find . -mindepth 1 -maxdepth 1 -type f -exec grep -q "foo" {} \; -exec grep -l "321" {} +
댓글
에 POSIX 줄을 사용하는 대신
간단한 스크립트로 수행 할 수 있습니다.
for FILE in * do grep -q foo $FILE && grep -q 321 $FILE && echo $FILE done
또한 한 줄로 수행 할 수도 있습니다.
for FILE in *; do grep -q foo $FILE && grep -q 321 $FILE && echo $FILE; done
grep
는 문자열을 찾은 경우 0 (true)을 반환하고 명령을 구분하는 &&
는 다음을 의미합니다. 두 번째는 첫 번째가 참인 경우에만 실행됩니다. -q
옵션은 grep
가 아무것도 출력하지 않도록합니다.
반향은 두 문자열이 모두 다음과 같은 경우에만 실행됩니다. 같은 파일에서 찾을 수 있습니다.
다른 방법을 생각했습니다. 이 방법은 각 파일을 한 번만 grep
통해 문제의 파일이 설치된 RAM보다 큰 경우 더 효율적일 수 있습니다.
for FILE in * do test $(egrep -o "foo|321" $FILE | uniq | sort | uniq | wc -l) -eq 2 && echo $FILE done
및 한 줄 버전 :
for FILE in *; do test $(egrep -o "foo|321" $FILE | uniq | sort | uniq | wc -l) -eq 2 && echo $FILE; done
댓글