grep 명령어란 무엇인가?
리눅스를 비롯한 유닉스 계열 운영체제, 그리고 최신 macOS에서도 사용할 수 있는 강력한 검색 도구 "grep"의 기본 사용법을 소개합니다. 이 가이드만 따라 하면 파일 속에서 원하는 문자열을 손쉽게 찾을 수 있습니다.
리눅스나 UNIX 명령줄 인터페이스(CLI)를 다뤄본 경험이 있다면 grep이라는 이름을 한 번쯤 들어보셨을 것입니다. grep은 파일 안에서 특정 단어나 문구를 검색하는 명령줄 도구로, 거의 모든 리눅스 배포판에 기본 탑재되어 있으며 시스템 관리와 로그 분석에 없어서는 안 될 필수 유틸리티입니다.
기본 사용법: 파일에서 문자열 검색하기
가장 기본적인 형식은 아래와 같습니다. Apache 웹 서버 설정 파일인 httpd.conf에서 "www"라는 문자열을 검색해 보겠습니다.
# grep www /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
DocumentRoot "/var/www/html"
# e.g., www.apache.org (on) or 204.62.129.132 (off).
Alias /icons/ "/var/www/icons/"
위 예제에서는 /etc/httpd/conf/httpd.conf 파일에서 "www"가 포함된 줄을 찾아 4개의 결과를 반환했습니다. 명령 구조는 매우 단순하지만, grep은 이 외에도 수십 가지 옵션을 제공합니다. man grep 명령으로 공식 매뉴얼(맨페이지)을 열어보면 전체 기능을 확인할 수 있습니다.
두 개 이상의 검색어를 한 번에 찾기
grep의 확장 문법을 사용하면 하나의 명령으로 여러 단어를 동시에 검색할 수 있습니다. 앞선 명령을 수정해 "www"와 "server" 두 단어를 함께 찾아보겠습니다.
# grep 'www\|server' /etc/httpd/conf/httpd.conf
# SetHandler server-status
# Allow remote server configuration reports, with the URL of
# https://servername/server-info (requires that mod_info.c be loaded).
#ServerName www.example.com:80
DocumentRoot "/var/www/html"
# e.g., www.apache.org (on) or 204.62.129.132 (off).
Alias /icons/ "/var/www/icons/"
# SetHandler server-info
# enable the proxy server:
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# use only name-based virtual hosts so the server doesn't need to worry about
# server name.
출력 결과가 12줄로 늘어난 것을 확인할 수 있습니다. 핵심은 검색어를 'www\|server' 형태로 지정한 것입니다. 이때 파이프(|) 앞에 반드시 역슬래시(\)를 붙여야 합니다. 역슬래시를 빼먹으면 의도한 대로 검색되지 않으니 주의하세요.
egrep으로 더 간단하게
역슬래시 입력이 번거롭다면 확장 정규표현식을 지원하는 egrep(또는 grep -E)을 사용하면 됩니다. 역슬래시 없이 파이프만으로 여러 검색어를 나열할 수 있습니다.
# egrep 'www|server' /etc/httpd/conf/httpd.conf
# SetHandler server-status
# Allow remote server configuration reports, with the URL of
# https://servername/server-info (requires that mod_info.c be loaded).
#ServerName www.example.com:80
DocumentRoot "/var/www/html"
# e.g., www.apache.org (on) or 204.62.129.132 (off).
Alias /icons/ "/var/www/icons/"
# SetHandler server-info
# enable the proxy server:
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# use only name-based virtual hosts so the server doesn't need to worry about
# server name.
검색어를 더 추가하고 싶다면 파이프를 계속 이어 붙이면 됩니다. 예를 들어 # egrep 'www|server|apache' /etc/httpd/conf/httpd.conf처럼 세 개 이상의 단어도 한 번에 검색할 수 있습니다.
알아두면 유용한 grep 옵션
- -i: 대소문자를 구분하지 않고 검색합니다. (예:
grep -i www 파일명) - -n: 일치하는 줄의 번호를 함께 출력합니다.
- -r: 디렉터리 전체를 재귀적으로 검색합니다. (예:
grep -r "error" /var/log/) - -v: 일치하지 않는 줄만 출력합니다.
마무리: find와 조합하면 무적
grep은 단독으로도 강력하지만, find 명령과 조합하면 시스템 전체에서 원하는 파일과 내용을 빠짐없이 찾아낼 수 있습니다. 예를 들어 find / -name "*.conf" -exec grep -l "www" {} \;처럼 활용하면 특정 확장자를 가진 모든 파일에서 문자열을 검색할 수 있습니다. grep과 find의 조합만 익혀두면 컴퓨터 안에서 찾지 못할 것이 거의 없습니다. :)