grep은 텍스트 파일에서 정규 표현식(regular expression)과 일치하는 줄을 검색하는 명령줄(command-line) 유틸리티이다. 이름은 ed 편집기의 명령어 g/re/p (global, regular expression, print)에서 유래했다.
역사
grep은 켄 톰슨(Ken Thompson)이 개발했다. 원래는 ed 편집기에 내장된 정규 표현식 기능이 있었으나, ed는 파일 전체를 메모리에 로드해야 했기 때문에 대용량 텍스트를 처리하는 데 적합하지 않았다. 톰슨은 ed의 정규 표현식 코드를 떼어내어 독립 실행형 도구로 만들었고, 이것이 grep의 시작이다.
grep이 처음 등장한 것은 1973년 11월, Version 4 Unix에 포함되면서이다. 톰슨은 PDP-11 어셈블리 언어로 첫 번째 버전을 작성했으며, 이는 리 E. 맥마흔(Lee E. McMahon)이 《페더럴리스트 페이퍼스》(The Federalist Papers)의 저자를 분석하는 작업을 돕기 위한 목적이었다.
이름의 유래에 관해서는 다음과 같은 일화가 유명하다. 더그 매클로이(Doug McIlroy)가 톰슨에게 텍스트 검색 프로그램을 요청했고, 톰슨은 "밤새 생각해보겠다"고 답한 후 자신이 이미 만들어두었던 s(search의 약자)라는 개인용 프로그램을 약 한 시간 동안 수정·개선하여 다음 날 선보였다. 매클로이는 그것이 정확히 자신이 원하는 것이라고 말했다. 이 일화 때문에 grep이 "하룻밤 만에 작성되었다"는 이야기가 널리 퍼져 있다.
주요 특징
- 정규 표현식 지원: 단순 문자열뿐 아니라 복잡한 패턴 매칭이 가능하다.
- 파이프라인 처리: 유닉스 철학에 따라 다른 명령어와 파이프(
|)로 연결하여 사용할 수 있다. - 다양한 변형:
egrep(extended grep): 확장 정규 표현식 지원 (알프레드 아호(Alfred Aho)가 추가)fgrep(fixed grep): 고정 문자열 검색 (아호-코라식(Aho-Corasick) 알고리즘 사용)pgrep: 프로세스 이름 검색agrep(approximate grep): 근사 문자열 매칭 지원
동사로서의 사용
2003년 12월, 옥스퍼드 영어 사전(Oxford English Dictionary) 온라인판은 "grep"을 명사와 동사로 공식 등재했다. "You can't grep dead trees" (종이 문서는 grep할 수 없다)와 같은 표현이 널리 사용된다. 여기서 "dead trees"는 종이를 가리키는 속어이다.
현대적 의의
grep은 "프로토타입적 소프트웨어 도구"로 자주 인용되며, 매클로이는 grep이 톰슨의 도구 철학을 유닉스에 "돌이킬 수 없이 각인시켰다"고 평가했다. 현재 GNU grep, BSD grep 등 다양한 구현체가 존재하며, 리눅스, macOS를 비롯한 거의 모든 유닉스 계열 시스템에서 기본적으로 제공된다.