> 텍스트 처리 및 검색 > grep

grep: 일치하는 줄 수 세기

grep 명령어는 텍스트 파일이나 표준 입력에서 특정 패턴을 검색하는 강력한 유틸리티입니다. 특히 `-c` (또는 `--count`) 옵션을 사용하면, 패턴과 일치하는 줄의 총 개수를 효율적으로 셀 수 있습니다. 이는 로그 분석, 코드 검토, 데이터 필터링 등 다양한 상황에서 유용하게 활용됩니다.

개요

grep은 Global Regular Expression Print의 약자로, 정규 표현식을 사용하여 텍스트를 검색하고 일치하는 줄을 출력합니다. `-c` 옵션은 일치하는 줄 자체를 출력하는 대신, 일치하는 줄의 개수만을 숫자로 반환합니다.

주요 특징

  • 특정 패턴과 일치하는 줄의 개수만 출력
  • 정규 표현식 지원으로 유연한 패턴 검색
  • 대소문자 구분, 역매칭 등 다양한 검색 조건과 조합 가능
  • 여러 파일 또는 디렉토리 내 파일 검색 지원

주요 옵션

grep -c와 함께 자주 사용되거나 카운팅 결과에 영향을 미치는 주요 옵션들입니다.

카운팅/검색 제어

생성된 명령어:

명령어를 조합해 보세요.

설명:

`grep` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

grep -c 명령어를 활용한 다양한 사용 예시입니다.

특정 파일에서 패턴 일치 줄 수 세기

grep -c "error" sample.log

sample.log 파일에서 'error' 문자열이 포함된 줄의 개수를 셉니다.

대소문자 구분 없이 패턴 일치 줄 수 세기

grep -ci "warning" sample.log

sample.log 파일에서 'warning' 또는 'Warning' 등 대소문자 구분 없이 일치하는 줄의 개수를 셉니다.

여러 파일에서 패턴 일치 줄 수 세기

grep -c "keyword" *.txt

현재 디렉토리의 모든 .txt 파일에서 'keyword'가 포함된 줄의 개수를 각 파일별로 셉니다.

재귀적으로 디렉토리 내 파일에서 패턴 일치 줄 수 세기

grep -rc "function" .

현재 디렉토리와 모든 하위 디렉토리의 파일에서 'function' 문자열이 포함된 줄의 개수를 셉니다.

패턴과 일치하지 않는 줄의 개수 세기

grep -cv "success" sample.log

sample.log 파일에서 'success' 문자열이 포함되지 않은 줄의 개수를 셉니다.

파이프를 통해 입력받아 줄 수 세기

ls -l | grep -c "root"

ls -l 명령의 출력 중 'root'가 포함된 줄의 개수를 셉니다.

팁 & 주의사항

grep -c 명령어를 더욱 효과적으로 사용하기 위한 팁과 주의사항입니다.

grep -c와 wc -l의 차이

grep -c는 패턴과 일치하는 줄만 세는 반면, `grep "pattern" file | wc -l`은 `grep`의 출력(일치하는 모든 줄)을 `wc -l`이 받아서 줄 수를 셉니다. 대부분의 경우 `grep -c`가 더 효율적입니다. 하지만 `grep`으로 필터링된 줄에 대해 추가적인 처리가 필요한 경우 후자의 방식이 유용할 수 있습니다.

  • grep -c: 패턴 일치 줄만 카운트. 더 빠르고 직접적.
  • grep ... | wc -l: grep이 출력한 모든 줄을 카운트. 추가 파이프라인 처리에 유용.

정규 표현식 활용

grep은 강력한 정규 표현식을 지원합니다. 특정 단어뿐만 아니라, 줄의 시작(`^`), 끝(`$`), 특정 문자 집합(`[abc]`), 반복(`*`, `+`) 등을 활용하여 복잡한 패턴을 검색하고 카운트할 수 있습니다. 확장 정규 표현식을 사용하려면 `-E` 옵션을 추가하세요.

파일 이름 출력 제어

여러 파일을 검색할 때 `-c` 옵션은 기본적으로 각 파일 이름과 함께 카운트 결과를 출력합니다. 만약 파일 이름을 생략하고 총합만 얻고 싶다면, `grep -c "pattern" file1 file2 | awk '{s+=$1} END {print s}'`와 같이 `awk`를 조합하거나, `find . -name "*.log" -exec grep -c "pattern" {} + | awk '{s+=$1} END {print s}'`와 같이 사용할 수 있습니다.


동일 카테고리 명령어