특정 단어가 포함된 모든 파일을 찾은 다음 줄 수를 계산합니다.

특정 단어가 포함된 모든 파일을 찾은 다음 줄 수를 계산합니다.

특정 단어가 포함된 모든 파일을 재귀적으로 찾아야 하며, 해당 단어가 파일에 있으면 파일의 줄 수를 알아내야 합니다. 나는 이것을 사용하려고 노력했지만 grep지금까지 성공하지 못했습니다.

답변1

grep -Zlr "\<THE_WORD\>" * | xargs -0 wc -l

grep 옵션:

  • -Z- 인쇄된 파일 이름을 0/null 바이트로 종료하여 구분합니다(이상한 파일 이름이나 공백이 있는 파일 이름에 도움이 됨)
  • -l- 일치하는 줄 대신 파일 이름 나열
  • -r- 재귀적으로
  • -i- 대소문자 무시(선택 사항이지만 모든 변형을 찾는 데 유용할 수 있음)

따옴표 주위에는 "WHICH" 내부에서 "HI"가 발견되는 것을 방지하는 "단어 구분 기호"( 및 )를 THE_WORD사용했습니다 . 유용해요.\<\>

"THE_WORD"를 포함하는 0으로 구분된 파일 이름 목록을 에 파이프하고 xargs, 0바이트 구분 기호를 예상하도록 지시하고( -0), 실행 wc(단어 수), 행 수 표시( -l)


편집하다:

댓글에 있는 질문에 답하려면 다음 변형을 시도해 보세요. (조사를 좀 해봤습니다!)

grep -oi "\<THE_WORD\>" /dev/null * | sort | uniq -c 

그리고 설명:

  • -o줄에 있는 모든 항목을 인쇄한다는 의미입니다. 따라서 "blah blah THE_WORD blah THE_WORD blah blah"가 있으면 해당 줄에 대해 두 번 인쇄하고, 이 플래그가 없으면 grep은 해당 줄에 대해 한 번만 인쇄합니다.
  • -i대소문자 변형(예: The_Word, the_word 등)
  • \<단어의 시작 부분이어야 하므로 "WHICH"에서 "HI"를 찾을 수 없습니다.
  • `>'는 단어로 끝나야 하며, 'WHICH'에서 'HI'를 찾을 수 없도록 해야 합니다.
  • /dev/null단일 파일만 검색하는 경우에도 grep이 항상 파일 이름을 출력하도록 하는 더미 파일 이름입니다. 이것은 grep 옵션을 사용하여 강제할 수 있지만 "잘 알려지지 않은 마법"으로 평가할 수 있을 -H만큼 쉽고 설명이 더 많다는 것을 알았습니다.-H

  • 파이프라인을 통해 모든 것을 정렬합니다(어...정렬...).

  • 정렬된 목록을 uniq로 파이프하고 -c정렬된 목록의 각 항목 수를 셉니다.

그리고 타다! !

한 가지 예:

File example.c contains:

(*H)->segments=realloc((*H)->segments,sizeof(segment_t*)*((*H)->segment_count+1));

xenon-lornix:~/projects/emma> grep -oi "\<H\>" /dev/null *.c | sort | uniq -c
  3 example.c:H

따라서 개수 목록을 반환합니다(), 어디(example.c), 그리고 뭐 (시간)! ! 바라보다! 예!

동일한 파일 내용을 가진 또 다른 파일:

xenon-lornix:~/projects/emma> grep -oi "\<segments\>" /dev/null example.c | sort | uniq -c
  2 aa.c:segments

여기서 볼 수 있듯이 두 개가 발견되었습니다.부분, 그러나 계산되지 않음부분. \<& \>전체 단어만 일치하도록 강제합니다. THE_WORD123하다아니요단어가 영숫자가 아닌 문자인 경우 _THE_WORD_와 일치합니다. 참고용.

관련 정보