본문 바로가기
OS 운영체제/LINUX

grep (패턴 맞춤 출력 명령)

by yororing 2024. 10. 17.

00 개요

  • grep 명령어는 텍스트 검색 기능을 가진 명령어
  • 즉, 파일에서 특정 패턴을 검색하는 데 사용되는 강력한 도구로, 리눅스/유닉스 환경에서 주로 활용됨
  • 개발자나 시스템 관리자는 로그 파일 분석, 대규모 텍스트 데이터 처리 등 다양한 작업에서 효율적으로 grep를 사용해 데이터를 검색할 수 있음
  • 다음은 grep 명령어의 정의, 기능, 문법, 및 다양한 옵션들에 대한 정리

01  grep 명령어란

1. grep 정의

  • "global regular expression print"의 약자
  • 텍스트 파일 내 정규 표현식 (Regular Expression)이나 단어를 기반으로 패턴을 찾아 출력하는 명령어
  • grep을 활용하여 파일에서 특정 패턴이 포함된 줄을 빠르게 검색 가능

2. grep 명령어 기능

  • 텍스트 검색: 파일 내에서 지정된 패턴을 찾아내고 그 패턴이 포함된 줄 출력
  • 로그 분석: 대용량 로그 파일에서 특정 이벤트나 오류 메시지를 빠르게 찾아냄
  • 데이터 필터링: 스크립트나 파이프라인을 사용하여 특정 조건에 맞는 데이터를 걸러내고 처리 

3. grep 명령어 문법

grep [option...] patterns [filename...]
grep [option...] -e patterns ... [filename...]
grep [option...] -f pattern_file ... [filename...]
  • option (옵션): 검색을 조정하는 다양한 옵션 (여러 옵션 가능)
  • patterns: 찾고자 하는 텍스트나 정규 표현식 ('\n'로 구분하여 여러 패턴 가능), 보통 ""로 감싸져있음 
  • filename (파일명): 검색할 대상 파일 (여러 파일 가능)
  • 설명:
    • filename이 주어졌을 경우, grep 은 각 file 안에 patterns를 찾음
    • patterns 는 하나 이상의 패턴을 의미, 각 패턴은 줄바꿈 문자로 구분됨
    • grep은 패턴과 일치하는 각 줄을 출력함
    • 일반적으로 grep을 셸 명령에서 사용할 때 patterns 는 쌍따옴표 ("")로 묶어야 함
    • file이 "-"로 표시되면 표준 입력 (standard input)을 의미
    • file을 입력하지 않은 경우, 재귀적 검색은 현재 작업 디렉토리를 검사하며, 비재귀적 검색은 표준 입력을 읽음 

02  grep 명령어 옵션

1. 옵션 종류

  • 여러 개의 옵션을 함께 사용할 때는 - 기호는 한 번만 써도 됨

1) Generic Program Information

종류 설명 
--help grep 사용 방법에 대한 도움말 표시
-V, --version grep의 버전 출력 

2) Pattern Syntax

종류 설명 
-E, --extended-regexp 확장된 정규 표현식 (ERE)을 사용하여 패턴 검색
-F, --fixed-strings 패턴을 문자열로만 인식하여 검색 (정규 표현식 비활성화)
-G, --basic-regexp 기본 정규 표현식 (BRE) 사용 (기본값)
-P, --perl-regexp Perl 호환 정규 표현식 사용
  • Basic vs Extended Regular Expression (BRE vs ERE)
    • BRE (기본 정규 표현식)에서는 메타 문자 ?, +, {, |, (, )가 특별한 의미를 잃고 대신 백슬래시를 붙인 버전인 \?, \+, \{, \|, \(, \)를 사용해야 함 

3) Matching Control

종류 설명
-e 패턴, --regexp=패턴 해당 패턴을 검색에 사용함
이 옵션을 여러 번 사용하거나 -f (--file) 옵션과 함께 사용하면 주어진 모든 패턴을 검색
"-"로 시작하는 패턴을 보호할 때 사용 가능
-f 파일명, --file=파일명 지정한 파일에서 패턴을 한 줄씩 출력
이 옵션을 여러 번 사용하거나 -e (--regexp) 옵션과 함께 사용하면 모든 패턴을 검색
빈 파일은 패턴이 없으므로 아무것도 매치되지 않음
파일이 -일 경우 표준 입력에서 패턴을 읽음 
-i, --ignore-case 대소문자 구분 없이 검색
--no-ignore-case 대소문자 구분하여 검색 (shell script에서 이미 -i 옵션 사용했을 경우 두 개의 옵션이 서로 override 하기에 이를 무효화하기 위해 사용 가능)
-v, --invert-match 패턴과 일치하지 않는 줄 출력
-w, --word-regexp 단어 전체와 일치하는 패턴만 검색
예, grep -w ${service}에서 ${service}가 "apache"인 경우, grep -w apache는 "apache2", "apachectl" 등이 아닌 "apache"만 일치시킴
-x, --line-regexp 줄 전체가 패턴과 일치하는 경우에만 출력 

4) General Output Control

종류 설명
-c, --count 일치하는 줄의 개수 출력
--color[=WHEN], --colour[=WHEN] 일치하는 문자열, 줄, 파일 이름, 줄 번호 등을 터미널에서 색깔로 표시
색상은 환경 변수 GREP_COLORS로 정의되며, WHEN은 never(사용 안 함), always(항상), 또는 auto(자동)로 설정 가능 
-l, --files-with-matches 패턴이 일치하는 파일명만 출력
-L, --files-without-match 패턴이 일치하지 않는 파일명만 출력
-m NUM, --max-count=NUM NUM 개의 일치하는 행을 읽은 후 파일 읽기 중지
NUM = 0일 경우 즉시 입력을 읽지 않고 중지
NUM = -1일 경우 무한대로 처리됨, grep은 중지하지 않음 (기본값)
정규 파일에서 표준 입력이 들어오는 경우, NUM 개의 일치하는 행이 출력되면 grep은 마지막 일치하는 행 바로 다음으로 표준 입력을 위치시키고 종료
이렇게 하면 호출 프로세스가 검색 재개 가능
NUM 개의 일치하는 행 후 grep은 모든 후행 문맥 행을 출력
-c 또는 --count 옵션도 사용된 경우, grep은 NUM보다 큰 개수를 출력하지 않음
-v 또는 --invert-match 옵션도 사용된 경우, grep은 NUM 개의 비일치 행을 출력한 후 중지
-o, --only-matching 일치하는 부분만 출력
-q, --quiet, --silent 조용히 실행됨 - 즉, 표준 출력에 아무것도 작성하지 않음
일치하는 항목이 발견되면 즉시 0 상태 코드로 종료
오류가 감지되더라도 즉시 0 상태 코드로 종료
(-s 또는 --no-messages 옵션 참고)
-s, --no-messages 존재하지 않거나 읽을 수 없는 파일에 대한 오류 메시지를 표시하지 않음 

5) Output Line Prefix Control

종류 설명
-n, --line-number 일치하는 줄의 번호를 함께 출력
-H, --with-filename 파일명과 함께 출력(여러 파일 검색 시 유용)
-s, --no-messages 에러 메시지를 출력하지 않음

6) Context Line Control

종류 설명
-A, --after-context 일치하는 줄 이후의 n줄을 함께 출력
-B, --before-context 일치하는 줄 이전의 n줄을 함께 출력
-C, --context 일치하는 줄 전후 n줄을 함께 출력

7) File and Directory Selection

종류 설명
-r, --recursive 하위 디렉토리까지 재귀적으로 검색
--exclude 검색에서 제외할 파일을 지정
--include 검색할 파일을 지정(파일 확장자 기준으로 지정 가능)

 

 

 

참조

  1. (linux 매뉴얼) https://man7.org/linux/man-pages/man1/grep.1.html
  2. https://ko.wikipedia.org/wiki/Grep 
  3.