특정 단어가 포함된 파일 수를 찾고 계산하는 방법은 무엇입니까?

특정 단어가 포함된 파일 수를 찾고 계산하는 방법은 무엇입니까?

"carrot"이라는 단어가 포함된 파일 수를 찾아 표시해야 합니다(대소문자 무시).

이것이 제가 지금까지 가지고 있는 것입니다. "carrot"이라는 단어가 포함된 파일이 몇 개인지 계산하기 위해 여기에 wc를 추가하는 방법을 잘 모르겠습니다.

찾다. -exec grep -i 당근{} \;

답변1

첫째, 다른 사람들이 말했듯이 사용할 이유가 없습니다 find. 단지 재귀를 사용하십시오 grep.

grep -irm 1 carrot . | wc -l 

첫 번째 일치 후에 각 파일 검색을 중지하십시오 -m 1. grep그것이 없으면 수량을 계산할 수 없습니다문서carrot수량 만 포함철사, 동일한 파일에 여러 개의 carrot.man grep

    -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links  only  if they are on the command line.  This is
          equivalent to the -d recurse option.
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)
   -m NUM, --max-count=NUM
          Stop reading a file after NUM matching lines. 

정말로 find로 하고 싶다면 이렇게 하면 됩니다.

find . -type f -exec grep -im 1 carrot {} \; | wc -l

디렉토리가 -type f필요하지 않기 때문에 이것을 지정했습니다 .grep

답변2

해당 단어가 포함된 파일 수 찾기당근

number_of_files=`grep -l -r -i "carrot" . | wc -l`

매개변수 의미 grep:

-l, --files-with-matches
         Only the names of files containing selected lines are written to standard output.  grep will only search a file until a match has been found, making
         searches potentially less expensive.  Pathnames are listed once per file searched.  If the standard input is searched, the string ``(standard
         input)'' is written.

-R, -r, --recursive
         Recursively search subdirectories listed.

-i : case insenstive

wc -l:프로그램에 입력으로 전달된 라인 수를 인쇄합니다. 우리의 경우 이 줄은 입력 패턴과 일치하는 파일의 이름입니다 grep.

인쇄물

echo $number_of_files

답변3

smRaj 솔루션의 변형은 grep을 두 번 호출하는 것입니다. 다음은 동일한 결과를 제공합니다grep[]|화장실-l:

grep -l -r -i "carrot" . | grep -c .

다음은 검색어가 포함된 파일의 번호가 매겨진 목록을 인쇄합니다.

grep -l -r -i "carrot" . | grep -n .

관련 정보