"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 .