Grep

2021년 8월 15일 수정

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 뒤의 숫자는 일치 갯수를 정하는 것으로 원하는 대로 바꿀 수 있다.