grep 명령어
grep 명령어는 리눅스 사용자들에게는 필수 유틸리티입니다. grep 명령어를 사용해서 특정 파일 혹은 디렉토리에서 어떤 유형의 문자열을 걸러서 찾을 수 있게 도와줍니다.
grep이라는 명령어의 어원 또한 이를 상징합니다. ‘[G]lobal [R]egular [E]xpression [P]rint’라는 이름의 첫 글자를 따서 만든 명령어가 grep이기 때문이죠.
이 툴은 시스템 관리자, 개발자 등 다양한 사람들에게 시스템의 사용의 편의성을 높여주고 있습니다.
grep의 다양한 옵션
grep에서 사용할 수 있는 기능들 전체를 살펴보면 아래와 같습니다.
usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
다양한 기능들이 많지만, 흔히 사용하는 명령어의 조합 위주로 살펴보겠습니다.
기본 문법
위에서 전체 옵션을 살펴봤다면, grep의 기본 문법은 아래와 같습니다.
$ grep [options] pattern [file ...]
options
우선 options 항목에는 grep 명령어를 좀 더 세밀하게 컨트롤할 수 있는 몇몇 기능을 부여할 수 있습니다.
사람들이 많이 사용하는 주요 옵션들은 아래와 같습니다.
-r: 검색시 재귀적으로 찾기 (디렉토리 계속 파고들어가면서)
-i: 대소문자 무시하고 검색
-v: not 조건으로 검색 (-v test 라고 하면 test가 없는 것을 검색)
-n: 어느 파일의 몇 번째 줄에 있는지, 라인넘버 출력
-e: 정규식을 지정하고, 그 패턴에 맞는 것을 검색
-c: 일치하는 검색 결과의 갯수를 리턴
pattern
패턴은 내가 찾고자 하는 문자열에 대한 정규식입니다. 정규식을 지정하여 찾고자 하는 문자열을 효과적으로 추려서 볼 수 있습니다.
file …
file … 이라고 표시된 이유는, 여러 개의 파일 혹은 디렉토리를 지정할 수 있기 때문입니다. 검색하고자 하는 문자열을 한 개 혹은 여러 개의 파일/ 디렉토리 대상으로 검색할 수 있습니다.
사용 예제
$ grep "error" /var/log/syslog
/var/log/syslog 디렉토리에서 error라는 문구가 포함된 부분을 찾아줍니다.
$ grep -i "error" /var/log/syslog
위와 동일하지만, -i 옵션이 추가되었네요. -i는 대소문자를 무시하고 찾아줍니다. 따라서, ERROR라는 문구가 들어갔어도 찾아줄 것입니다.
$ grep -r "error" /var/log/
/var/log/ 하위의 모든 디렉토리에서도 erorr 문구를 찾고 싶다면, -r 옵션이 필요할 것입니다. 재귀적으로 찾아들어가기 때문에 -r 옵션을 사용하면 하위 디렉토리까지 모두 검색하게 됩니다.
$ grep -n "error" /var/log/syslog
검색 문구가 어느 파일의 몇 번째 줄에 있는지 알고 싶다면, -n 옵션을 사용하세요. 정확한 위치까지 함께 보여줍니다.
$ grep -c "error" /var/log/syslog
해당 검색어가 몇 번 나타났는지 알고 싶다면 -c 옵션을 사용하면 됩니다.
$ grep -v "error" /var/log/syslog
만약, 특정 문자를 제외한 나머지를 알고 싶다면 -v 옵션을 사용해 보세요.
그리고, 앞서 나열한 옵션은 -in -iv 등과 같이 섞어서 지정해도 됩니다.