
"누가", "무엇을", "왜", "어떻게", "언제"가 포함된 모든 파일을 찾고 싶습니다. 순서에 관계없이 모든 단어입니다. 대소문자를 구분하지 않음
나는 시도했다:
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
-Z
grep
--null
grep
또는 파일 이름에서 공백 및 기타 쉘 특수 문자를 제거하십시오.
-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}' {} +