파일에서 여러 문자열을 찾는 방법은 무엇입니까? [복사]

파일에서 여러 문자열을 찾는 방법은 무엇입니까? [복사]

주어진 문자열이 있는 파일을 찾으려면 다음 명령을 사용합니다.

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에서는 grepwith -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파일 이름이 하나만 있는 경우 -Fgrep이 검색 중인 패턴을 일반적으로 원하는 정규식 대신 문자열로 처리합니다.

find /var/www/http -type f -exec grep -iHFf patterns.txt {} +

답변3

그냥 사용해도 문제 없나요 egrep?

egrep -r 'string1|string2|string3' /var/www/http

관련 정보