디렉토리의 각 파일에서 문자열의 발생 횟수를 계산하는 방법은 무엇입니까?

디렉토리의 각 파일에서 문자열의 발생 횟수를 계산하는 방법은 무엇입니까?

grep -G '{string}' *. | wc -l{string}전체 디렉토리의 총 개수를 알려줍니다. 반면에 wc -l *.파일당 줄당 개수는 제공되지만 {string}내가 관심 있는 파일당 개수는 제공되지 않습니다. 나는 {string}각 파일의 발생 횟수를 개별적으로 계산할 수 있는 두 가지 조합을 찾고 있습니다.

답변1

이것필요한 옵션은 다음과 같습니다 -c.

-씨

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


검색하려는 중첩된 디렉터리가 있는 경우:

사용+:

find /your_dir -type f -exec grep -cF '{string}' {} +

또는 GNU Grep(또는 다른 구현)을 사용할 수 있는 경우-r재귀 검색을 위해 )를 지원합니다 .

grep -rcF '{string}' your_dir

디렉토리 내부에 하위 디렉토리가 없으면 간단합니다.

grep -cF '{string}' your_dir/*

작동합니다.


또한 -G( GNU Grep특정) BRE엔진이 활성화되어 있으며 이는 기본 선택이며 ERE유사한 태그 {(이스케이프되지 않은 경우)를 처리하지 않습니다. -F옵션 강제 사용을 고려하십시오 .필요하지 않은 경우 간단한 문자열을 검색하거나 정규식 메타 문자 보간을 비활성화합니다.

답변2

grep옵션은 -c각 파일에 대해 선택한 줄 수를 인쇄합니다.

grep -c '{string}' *.

(옵션 -G(기본 정규식)은 기본값이므로 중복됩니다.)


샘플 파일 사용

file1

foo
bar
baz
foo
bar

file2

foo
bar
baz
foo
bar
foo
foo
bar
bar foo
baz
foo
bar

나는 다음과 같은 결과를 얻습니다.

$ fgrep -c foo file*
file1:2
file2:6

파일 이름 패턴이 하나의 파일에만 일치하는 경우 grep해당 파일 이름은 인쇄되지 않습니다. 이를 방지하려면 -HGNU가 있는 경우 옵션을 사용할 수 있습니다 grep.

grep -cH '{string}' *.

( /dev/null비표준 옵션 대신 추가하면 -H첨부파일의 개수가 0으로 표시됩니다.)

관련 정보