grep -rc가 작동하지 않습니다. 디렉터리에서 일치 항목을 계산합니다.

grep -rc가 작동하지 않습니다. 디렉터리에서 일치 항목을 계산합니다.

디렉터리의 일치 항목 수를 계산하고 싶습니다.

grep -rn 'hello' .줄 번호를 인쇄하고 현재 디렉터리를 재귀적으로 탐색하면서 잘 작동합니다.

grep -rc 'hello' .반면에 카운트를 반환하지 않고 현재 디렉터리의 모든 파일을 인쇄하는 것 같습니다.

비슷한 것이 있습니다질문과 답변grep -r <pattern> <directory>이는 to 의 결과를 파이핑하여 이를 수행하는 방법을 보여 주지만 wc -l위의 명령이 작동하지 않는 이유와 grep 옵션만 사용하여 이를 수행할 수 있는 방법이 있는지 알고 싶습니다.

답변1

이것은 예상됩니다.

grep -r -n재귀를 수행하여 grep주어진 패턴과 일치하는 줄을 표시하고 파일 이름과 줄 번호를 앞에 붙입니다. 모든 파일에서 일치하는 모든 줄을 제공합니다.

-n 각 출력 줄 앞에는 줄 1부터 시작하여 파일의 상대 줄 번호가 옵니다. 처리된 각 파일에 대해 줄 번호 카운터가 재설정됩니다.

grep -r -c재귀가 수행되어 grep고려된 모든 파일의 파일 이름과 해당 파일의 패턴 일치 수가 표시됩니다. 파일당 한 줄씩 제공됩니다.

-c 선택한 행 수만 표준 출력에 씁니다.

특정 디렉터리에 있는 모든 파일의 패턴과 일치하는 수를 (재귀적으로) 얻으려면 다음 grep -r과 같이 결과를 제공할 수 있습니다.wc -l당신이 링크 한 답변에서 제안한대로:

$ grep -r 'pattern' . | wc -l

도착하다만 사용grep이를 달성하려면:

$ grep -r 'pattern' . | grep -c 'pattern'

wc정규식 엔진을 사용하여 줄 바꿈을 계산하는 것은 "작업에 적합한 도구"이지만 정규식 엔진을 사용하여 작업을 수행하는 것은 확실히 과잉입니다.

-o플래그 도 있습니다 grep.

-o 각 일치 항목을 인쇄하되 전체 줄이 아닌 일치 항목만 인쇄합니다.

이는 각 줄의 개별 일치 항목을 개별적으로 계산하려는 경우 유용할 수 있습니다.

$ grep -r -o 'pattern' . | wc -l

예를 들어 다음 두 grep호출( bash또는 ksh93)을 비교해 보세요.

$ grep 'l' <<<"Hello world!" | wc -l
1

$ grep -o 'l' <<<"Hello world!" | wc -l
3

관련 정보