본문 바로가기

Linux Unix/Command

[ Linux ] grep - 테스트 파일에서 특정 문자열을 검색하기

반응형

grep은 텍스트 파일이나 명령 출력에서 특정 패턴을 검색할 때 사용하는 강력한 도구입니다. 주로 Unix/Linux 시스템에서 사용되며, 다양한 옵션과 정규식을 활용하여 원하는 텍스트를 효율적으로 찾을 수 있습니다.


 

1. 기본 문법

grep [옵션] "패턴" [파일명]
  • 패턴: 찾고자 하는 문자열 또는 정규식.
  • 파일명: 검색할 파일 이름. 파일명을 생략하면 표준 입력(stdin)에서 검색.

 

2. 자주 사용하는 옵션

옵션 설명
-i 대소문자 구분 없이 검색.
-v 패턴에 일치하지 않는 라인을 출력.
-n 일치하는 라인의 라인 번호를 출력.
-c 일치하는 라인의 개수만 출력.
-l 패턴에 일치하는 파일 이름만 출력 (여러 파일 검색 시).
-r 또는 -R 하위 디렉터리까지 재귀적으로 검색.
-w 단어 단위로 패턴 검색 (예: foo foobar에 매칭되지 않음).
-x 패턴과 완전히 일치하는 라인만 출력.
--color 일치하는 부분을 색상으로 표시 (기본적으로 활성화).

 

3. 예제

1) 간단한 텍스트 검색

grep "hello" file.txt
  • file.txt에서 "hello"를 포함하는 라인을 출력.

2) 대소문자 구분 없이 검색

grep -i "error" file.txt
  • "error", "Error", "ERROR" 등 대소문자 구분 없이 검색.

3) 라인 번호 출력

grep -n "TODO" file.txt
  • "TODO"를 포함하는 라인의 번호와 내용을 출력.

4) 일치하지 않는 라인 출력

grep -v "test" file.txt
  • "test"가 없는 라인만 출력.

5) 디렉터리 내 모든 파일 검색

grep -r "function" /path/to/directory
  • /path/to/directory 내 모든 파일에서 "function" 검색.

6) 정규식을 사용한 패턴 검색

grep "^[0-9]" file.txt
  • 숫자로 시작하는 라인을 출력.

7) 파일 이름만 출력

grep -l "main" *.c
  • *.c 파일 중 "main"을 포함한 파일의 이름만 출력.

 

4. 정규식 활용

grep은 기본적으로 기본 정규식(Basic Regular Expression, BRE)을 사용하며, -E 옵션을 사용하면 확장 정규식(Extended Regular Expression, ERE)을 사용할 수 있습니다.

정규식 예제

패턴 설명
^pattern 라인의 시작에서 pattern 검색.
pattern$ 라인의 끝에서 pattern 검색.
. 임의의 한 문자와 매칭.
[abc] a, b, c 중 하나와 매칭.
[a-z] 소문자 알파벳 중 하나와 매칭.
[0-9] 숫자 중 하나와 매칭.
pattern* pattern이 0번 이상 반복된 경우.
pattern+ pattern이 1번 이상 반복된 경우 (-E 필요).
pattern? pattern이 0번 또는 1번 나타난 경우 (-E 필요).
grep -E "file[0-9]+" file_list.txt
  • file_list.txt에서 "file" 뒤에 숫자가 하나 이상 있는 문자열 검색.

 

5. 파이프와 함께 사용

grep은 다른 명령어와 파이프(|)를 조합하여 강력하게 활용할 수 있습니다.

ps aux | grep "nginx"
  • 실행 중인 프로세스 중 "nginx"와 관련된 프로세스 검색.
dmesg | grep -i "error"
  • 시스템 로그에서 "error" 관련 메시지 검색.

grep은 단순한 텍스트 검색부터 복잡한 패턴 매칭까지 가능하며, 로그 분석, 파일 내용 검색 등 다양한 작업에 유용합니다. 필요에 따라 정규식과 옵션을 조합하면 효율적으로 사용할 수 있습니다.

반응형