Grep
≡ 목차 (Table of Contents)
Grep
Grep은 파일이나 텍스트에서 특정 텍스트를 검색하는 데 사용되는 *NIX CLI 도구다.
기본 사용법
기본적으로는 텍스트 파일에서 문자열을 검색하는 것을 생각할 수 있다.
grep 'text' some-file.txt
혹은 파일이 아니라 파이프로 전달된 텍스트에서 검색할 수도 있다.
$ echo 'this is sample' | grep sam this is sample ^^^
위의 경우 글에서는 표현할 수 없는 컬러 등으로 표시되기 때문에 실제로는 ^^^
가 표시되지 않는다.
뭐 하여간 이어지는 다양한 옵션이 있으니 적당히 섞어서 사용하면 된다.
대소문자 무시
-i
옵션을 사용하면 대소문자를 가리지 않고 검색한다.
grep -i KEYWORD PATH
바이너리(Binary) 파일 무시하기
가끔 이진 파일에서 검색하느라 느려지거나 이상한 것을 검색하기도 하는데, 이를 때는 -I
옵션을 사용할 수 있다.
grep -I KEYWORD PATH
재귀(Recursive) 검색
재귀 검색이란 하위 디렉터리를 모두 다 뒤져본다는 의미다.
grep -r KEYWORD *
위 명령은 현재 디렉터리 및 하위 디렉터리의 모든 파일에서 키워드를 검색한다.
만약 대상 경로에 특별한 이름을 넣으면 원하지 않는 결과가 나올 수 있다. 예를 들어
grep -r text *.py
위와 같이 검색을 하게 되면 하위 디렉터리가 제대로 검색되지 않을 가능성이 높다. 왜냐하면 *.py
라는 패턴의 이름에 해당하는 디렉터리 만을 뒤져보기 때문이다. 즉 저 패턴은 파일 이름 뿐만 아니라 디렉터리 이름도 해당된다는 말이다.
검색된 파일 이름만 보기
-l
옵션은 발견된 패턴을 화면에 표시하지 않게 한다.
grep -l KEYWORD PATH
이 경우 검색된 내용은 아예 출력하지 않고 파일 이름 만을 출력하는 데 파이프를 통해 여러 작업을 하기 유용한 커맨드다. 예를 들어 검색된 파일만 삭제하거나 등등 말이다.
단어만 검색하기
단어 단위 검색을 하기 위해서 -w
옵션을 사용할 수 있다.
grep -w WORD PATH
예를 들어 정확한 함수 이름을 검색하고 싶을 때 유용하다.
줄 번호(Line Number) 보기
-n
옵션을 이용해 줄 번호를 표시할 수 있다.
grep -n KEYWORD PATH
줄 번호를 알면 예를 들어 에디터를 통해 바로 해당 위치에서 편집하는 데 활용이 가능하다.
발견 개수 보기
-c
옵션을 주면 발견된 개수(count)를 구할 수 있다.
grep -c KEYWORD PATH
패턴을 만족하는 검색 결과가 몇 개인지 숫자로 표시되는데, 여러 셸 스크립트를 작성하는 데 유용할 것 같다.
검색되지 않는 것만 보기
-v
옵션을 주면 검색되지 않는 라인을 화면에 표시한다.
grep -v KEYWORD PATH
일반적인 검색에선 써먹기 힘들겠지만, 텍스트의 대부분이 비슷한 내용으로 뒤덮여 있을 때 다른 텍스트를 검색하기 쉽다.
정규표현식
원래 정규표현식이 지원되지 때문에 그냥 써도 된다.
grep 'word1\|word2\|word3' *
하지만 저런 이스케이프가 귀찮다면 아래 처럼 -E
옵션을 줄 수도 있다.
grep -E 'word1|word2|word3' *
-E
옵션을 주면 일부 이스케이프가 필요 없이 순수한 정규표현식 문법을 적을 수 있다.
일치 갯수 제한
-mN
식의 옵션으로 몇 번째 검색 일치 시 검색을 중지할 수 있다.
grep -m1 keyword file
-m
뒤의 숫자는 일치 갯수를 정하는 것으로 원하는 대로 바꿀 수 있다.