문자열이 여러 개 있는데 이를 여러 파일에서 찾아야 합니다. 예를 들면 다음과 같습니다.
string1
string2
stringn
file1.txt
file2.txt
filen.txt
Bash에서 이를 수행하는 (간단한) 방법이 있습니까? 문자열이 발견되면 해당 문자열이 어느 파일에 있는지 알아야 합니다.
답변1
-e 옵션을 사용한 간단한 grep 명령:
grep -e "string1" -e "string2" -e "stringn" file*.txt
또는 다음과 같이 모든 검색 문자열을 search.txt라는 파일에 넣을 수 있습니다.
string1
string2
string3
...
...
stringN
그런 다음 -f
다음 옵션을 사용하여 grep을 실행합니다.
grep -f search.txt file*.txt
답변2
모든 문자열을 한 번에 검색하려면 grep을 사용하십시오.
grep -E -H 'string1|string2|stringn' file1.txt file2.txt filen.txt
-E
파이프 문자(|)를 이스케이프하지 않고 사용할 수 있습니다 . 일치하는 각 파일 이름을 인쇄합니다 -H
. 정규식은 파이프를 사용하여 각 문자열을 분리하여 grep
각 문자열을 순차적으로 일치시키려고 시도합니다.
답변3
대규모 문자열 세트에 대해 이 기능을 지원하는 grep 변형이 있습니다. 시도해 보세요.
fileWithListOfSearchTargets=myFileOfSearchTargets.txt
fgrep -f ${fileWithListOfSearchTargets} file1 file2 ... filen
(변수와 파일 이름은 자체 문서화되므로 원하는 이름을 사용할 수 있습니다.)
모든 검색 문자열을 파일에 입력해야 합니다.
파일 목록에서 일치시키려는 경우가 아니면 선행 또는 후행 공백이 없습니다. 대부분은 fgrep
처리할 수 있는 크기가 제한되어 있습니다. 파일에 10,000줄을 밀어넣으려고 하지 마세요.
답변4
유닉스 찾기 명령:
find . -exec grep "i want to find this string" '{}' \; -print
검색은 현재 디렉터리부터 시작됩니다.
이것은 또한 작동합니다:
egrep -r 'arbitrary string' *