주어진 문자열이 있는 파일을 찾으려면 다음 명령을 사용합니다.
find /var/www/http -type f | xargs grep -iR "STRING1"
하지만 "STRING1", "STRING2" 또는 "STRING3"이 포함된 파일을 찾는 방법은 무엇입니까?
이 코드는 작동하지 않습니다:
find /var/www/http -type f | xargs grep -iR "STRING1" | xargs grep -iR "STRING2"
답변1
POSIXly에서는 grep
with -E
옵션을 사용하세요.
find /var/www/http -type f -exec grep -iE 'STRING1|STRING2' /dev/null {} +
또는 -e
:
find /var/www/http -type f -exec grep -i -e 'STRING' -e 'STRING2' /dev/null {} +
적어도 GNU 시스템, OSX 및 FreeBSD에서는 일부 구현을 통해 다음을 이스케이프할 수 있습니다 |
.
find /var/www/http -type f -exec grep -i 'STRING1\|STRING2' /dev/null {} +
답변2
유지 관리를 쉽게 하기 위해(검색하는 문자열 목록이 나중에 변경될 수 있는 경우) 패턴을 파일(예: 패턴.txt)에 넣고 스위치를 사용합니다 -f
( 다음으로 -R
제한하는 경우에는 find
필요하지 않음). files; -H
파일 이름이 하나만 있는 경우 -F
grep이 검색 중인 패턴을 일반적으로 원하는 정규식 대신 문자열로 처리합니다.
find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
답변3
그냥 사용해도 문제 없나요 egrep
?
egrep -r 'string1|string2|string3' /var/www/http