이번에는 지난번 리눅스 정규표현식과 메타문자에 대한 포스팅에 이어서 실제로 그러한 메타문자를 자주 사용하게 되는 grep 이라는 명령어에 대해 기록한다.
우선 grep 이라는 이름의 기원은 ex 문서 편집기에서 찾을 수 있다. ex 편집기를 사용하여 특정 문자열을 찾으려면 프롬프트에서 다음과 같이 입력하여야 한다.
: g/pattern/p
g(global)가 pattern 앞에 오면 파일의 모든 행을 검색한다. 여기서 p는 print 를 말하는 것이다. 검색 패턴을 정규표현식이라고 부르기도 하므로, pattern을 RE(regular expression)로 대신해서 명령어를 다음과 같이 표시할 수 있다.
: g/RE/p
이와같이 grep 이라는 이름의 의미만 알아도 grep 이라는 명령어가 하는 일을 대략 추측할 수 있다. grep은 정규표현식(RE)을 파일 전체(g)에서 찾아 해당 행을 출력(p)한다. grep을 쓸 때의 장점은 패턴 검색을 위해 편집기를 실행시킬 필요가 없을 뿐만 아니라, ex나 vi보다 속도가 훨씬 빠르다.
아래의 표는 grep 명령어를 사용할 때 쓰이는 몇가지 옵션들이다.
옵션
설명
-b
검색 결과의 각 행 앞에 검색된 위치의 블록 번호를 표시한다. 검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는데 유용하다
-c
검색 결과를 출력하는 대신, 찾아낸 행의 총수를 출력한다.
-h
파일 이름을 출력하지 않는다.
-i
대소문자 구분을 하지 않는다.
-l
패턴이 존재하는 파일의 이름만 출력한다.
-n
파일 내에서 행 번호를 함께 출력한다.
-s
에러 메시지 외에는 출력하지 않는다. 종료 상태를 검사할 때 유용하게 쓸 수 있다.
-v
패턴이 존재하지 않는 행만 출력한다.
-w
패턴 표현식을 하나의 단어로 취급하여 검색한다. 즉 \< 와 \> 를 양쪽에 사용한 것과 같은 효과를 낸다. grep에서만 사용할 수 있다.