모든 검색 문자열을 포함하는 txt 파일을 반복적으로 검색합니다.

모든 검색 문자열을 포함하는 txt 파일을 반복적으로 검색합니다.

"누가", "무엇을", "왜", "어떻게", "언제"가 포함된 모든 파일을 찾고 싶습니다. 순서에 관계없이 모든 단어입니다. 대소문자를 구분하지 않음

나는 시도했다:

grep -rl --include='*.adoc' "Who" . | xargs grep -l "What" | xargs grep -l "Why" | xargs grep -l "How" | xargs grep -l "When"

그것이 제공하는 오류는 다음과 같습니다.

grep: Walkthrough/datatable/extras/Scroller/media/data/2500.adoc: No such file or directory

답변1

문제는 일부 파일 이름에 공백이 포함되어 있다는 것입니다. xargs여러 "파일 이름"으로 분할합니다.

공백 대신 NUL로 분할하려면 -0옵션을 추가하고 , 줄 바꿈 대신 NUL을 사용하도록 하려면 명령줄 에 또는 옵션을 추가하세요. (그러나 출력을 읽으려면 마지막을 생략하십시오...)xargs--null-Zgrep--nullgrep

또는 파일 이름에서 공백 및 기타 쉘 특수 문자를 제거하십시오.

-i그렇지 않으면 대소 문자를 구분하지 않는 옵션이 필요하다는 @James의 대답이 정확하지만 솔루션은 기본적으로 정확합니다 .

답변2

awk -v RS="" -v IGNORECASE=1 '/who/&&/how/&&/when/&&/what/{print FILENAME}' *

find . -type f -name "*.adoc" -exec awk -v RS="" -v IGNORECASE=1 '/who/&&/how/&&/when/&&/what/{print FILENAME}' {} +

grep -i -E -rl --include='*.adoc' "(who|What|Why|when|where|how)" .

관련 정보