맨위로가기

Grep

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

grep은 텍스트 파일 내에서 특정 패턴을 검색하는 데 사용되는 명령어이다. 켄 톰슨이 개발했으며, ed 텍스트 편집기의 g/re/p 명령에서 이름을 따왔다. grep은 정규 표현식을 지원하며, 다양한 옵션을 통해 대소문자 구분, 단어 단위 검색, 일치하지 않는 행 출력 등 다양한 방식으로 검색을 수행할 수 있다. egrep, fgrep과 같은 변형이 존재하며, 현재는 grep의 옵션으로 통합되었다. grep은 유닉스, 리눅스, 윈도우 등 다양한 운영체제에서 사용되며, 텍스트 검색 및 처리에 널리 활용된다. 또한, "grep"은 동사로 사용되어 무언가를 찾는 행위를 의미하기도 한다.

더 읽어볼만한 페이지

  • 유닉스 텍스트 처리 유틸리티 - Tr (유닉스)
    `tr` (유닉스)는 텍스트 변환을 위한 유닉스 명령어 유틸리티로, 문자 집합 변환, 특정 문자 삭제 등의 기능을 수행하며, 다양한 옵션과 문자 집합 지정 방식을 지원하여 셸 스크립트 등에서 활용되고, 과거 정치적 악용 사례도 존재합니다.
  • 유닉스 텍스트 처리 유틸리티 - Apropos
    apropos는 사용자가 입력한 키워드와 관련된 매뉴얼 페이지를 검색하는 명령어로, man -k의 래퍼로 작동하며 대소문자를 구분하지 않고 매뉴얼 페이지의 이름 섹션에서 키워드를 검색하여 관련 페이지 목록을 반환한다.
  • 표준 유닉스 프로그램 - AWK
    AWK는 1977년에 개발된 텍스트 처리 및 프로그래밍 언어로, 유닉스 환경에서 텍스트 처리를 위해 설계되었으며 정규 표현식 처리 기능을 통해 텍스트 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행한다.
  • 표준 유닉스 프로그램 - Rm (유닉스)
    유닉스 명령어 `rm`은 파일을 삭제하는 데 사용되며, 옵션을 통해 삭제 동작을 제어하고 디렉터리를 재귀적으로 삭제할 수 있지만, 잘못 사용하면 시스템에 심각한 손상을 초래할 수 있어 주의가 필요하며 안전 장치나 휴지통 기능 등의 대안이 존재한다.
  • GNU 프로젝트 소프트웨어 - GNU 코어 유틸리티
    GNU 코어 유틸리티는 유닉스 계열 운영체제에서 파일, 셸, 텍스트 조작을 위한 기본적인 명령어 모음으로, GNU 파일 유틸리티에서 시작하여 3개의 패키지가 통합되어 발전했으며 셸 스크립트 및 시스템 관리에 필수적인 도구를 제공한다.
  • GNU 프로젝트 소프트웨어 - GNU 허드
    GNU 허드는 유닉스 운영 체제를 대체하는 것을 목표로 개발된 GNU 프로젝트의 커널로, 마이크로커널 기반의 서버-클라이언트 아키텍처를 사용하며, 파일 시스템 기능을 확장하는 트랜슬레이터 개념을 제공한다.
Grep - [IT 관련 정보]에 관한 문서
grep
종류명령어
설계자켄 톰프슨
개발자벨 연구소
발표일1973년 11월
구현 언어C
운영체제유닉스
유닉스 계열
플랜 9
인페르노
OS-9
MSX-DOS
IBM i
플랫폼크로스 플랫폼

2. 역사

grep은 켄 톰슨이 파일에서 특정 패턴을 검색하기 위해 작성한 비공개 유틸리티였다. 더그 매킬로이는 톰슨에게 그러한 프로그램을 만들어 달라고 요청했고, 톰슨은 하룻밤 만에 프로그램을 완성하여 다음 날 매킬로이에게 보여주었다. 매킬로이는 이 프로그램이 자신이 원하던 바로 그것이라고 말했다.[6]

톰슨은 리 E. 맥마흔이 페더럴리스트 논집의 저자를 식별하기 위한 텍스트 분석을 돕고자 PDP-11 어셈블리 언어로 최초 버전을 작성했다.[7] ed 텍스트 편집기는 정규 표현식을 지원했지만, 대량의 텍스트를 검색하기에는 어려움이 있었다. 그래서 톰슨은 정규식 코드를 독립된 도구로 추출하여 메모리 부담 없이 긴 파일을 처리할 수 있게 했다.[1] 그는 ed에서 사용된 `g/re/p` 명령어가 지정된 패턴과 일치하는 모든 줄을 출력했기 때문에 이 도구의 이름을 grep으로 선택했다.[8][9] grep은 버전 4 유닉스에 처음 포함되었다. 매킬로이는 grep이 톰슨의 도구 철학을 유닉스에 각인시킨 대표적인 소프트웨어 도구라고 평가했다.[10]

grep의 이름은 라인 에디터ed의 명령어 `g/re/p`에서 유래되었으며, 이는 "global regular expression print(파일 전체에서/정규 표현식에 일치하는 행을/표시한다)"라는 의미이다.[30]

3. 사용

`grep`의 일반적인 사용 예는 다음과 같다:

```bash

grep apple fruitlist.txt

```

이 경우, `grep`은 'fruitlist.txt'라는 파일에서 'apple'이라는 단어를 포함하는 모든 줄을 찾아서 출력한다. 이때, 'pineapple'이나 'apple'을 포함하는 모든 줄도 함께 출력된다. `grep` 명령어는 기본적으로 대소문자를 구분하기 때문에, 위 명령어로는 'Apple'이 들어있는 줄은 출력되지 않는다.

다음과 같이 `-i` 옵션을 사용하면 대소문자 구분 없이 'apple'이 포함된 모든 줄을 출력할 수 있다:

```bash

grep -i apple fruitlist.txt

```

`-i` 옵션은 `grep` 명령어가 대문자 사용을 무시하도록 한다.

'apple'이 독립적인 단어로 존재하는 모든 줄을 출력하고 싶다면 (`pineapple` 등이 포함된 줄은 제외) 다음과 같이 `-w` 옵션을 사용한다:

```bash

grep -w apple fruitlist.txt

```

위 예시에서는 간단한 영어 단어를 사용했지만, 정규 표현식을 사용하면 매우 복잡한 패턴 검색도 가능하다.

`grep` 명령어의 기본적인 사용법은 다음과 같다.

`grep` 옵션 패턴 파일

파일은 여러 개를 지정할 수 있으며, 생략하면 표준 입력에서 검색한다.

`grep` 명령어의 옵션은 다음과 같다:

옵션설명
`-i`알파벳 대소문자를 구분하지 않는다.
`-o`패턴에 일치하는 부분 출력한다.
`-v`패턴에 일치하지 않는 행을 출력한다.
`-r`파일로 디렉토리를 지정하여, 그 안의 모든 파일과 재귀적으로 하위 디렉토리에 대해 검색한다.
`-q`아무것도 출력하지 않는다.
`-E`확장 정규 표현식을 사용한다. `egrep` 명령어와 같은 동작을 한다.
`-F`정규 표현식이 아닌 일반 문자열(리터럴)을 사용한다. `fgrep` 명령어와 같은 동작을 한다.


4. 옵션

grep 명령어의 기본적인 사용법은 다음과 같다.



grep 옵션 패턴 파일



파일은 여러 개를 지정할 수 있으며, 생략하면 표준 입력에서 검색한다.

옵션에는 다음과 같은 것들이 있다.


  • `-i`: 알파벳 대소문자를 구분하지 않는다.[30]
  • `-o`: 패턴에 일치하는 부분'''만''' 출력한다.[30]
  • `-v`: 패턴에 '''일치하지 않는''' 행을 출력한다.[30]
  • `-r`: ''파일''로 디렉토리를 지정하여, 그 안의 모든 파일과 재귀적으로 하위 디렉토리에 대해 검색한다.[30]
  • `-q`: 아무것도 출력하지 않는다.[30]
  • `-E`: 확장 정규 표현식을 사용한다. `egrep` 명령어와 같은 동작을 한다.[30]
  • `-F`: 정규 표현식이 아닌 리터럴을 사용한다. `fgrep` 명령어와 같은 동작을 한다.[30]


POSIX에서는 `fgrep`과 `egrep`을 구형으로 취급하며, 각각 `grep -F`와 `grep -E`를 사용하는 것을 표준으로 하고 있다. Linux Standard Base에서도 지정 명령어이다.[33]

5. 변형

`egrep`은 확장 정규 표현식을 지원하는 버전으로, 현재는 grep의 `-E` 옵션으로 대체되었다.[12] `fgrep`은 고정된 문자열만 검색하는 버전으로, 아호-코라식 알고리즘을 사용하여 더 빠른 검색 속도를 제공한다.[13] 현재는 grep의 `-F` 옵션으로 대체되었다.[31][32]

정규 표현식 문법을 사용하는 `pcregrep`라는 grep 구현체도 있다.[39] GNU 버전의 grep에서도 `-P` 옵션을 사용하여 같은 기능을 쓸 수 있다.[40]

이 외에도 1988년에서 1991년 사이에 Udi Manber와 Sun Wu가 개발한 근사 문자열 매칭을 지원하는 `agrep` (approximate grep)도 있다.[26]

6. 이식

grep은 다양한 운영 체제와 소프트웨어 개발 환경에서 사용할 수 있도록 구현되어 있다. 마이크로소프트 윈도우에서는 시그윈이나 GnuWin32 등을 통해 grep을 사용할 수 있다. 윈도우에는 grep과 유사한 기능을 하는 `findstr` 명령어가 내장되어 있다.[34] MSX-DOS 버전 2용 MSX-DOS2 Tools에도 grep 명령어가 포함되어 있다. IBM i 운영 체제에도 grep, egrep, fgrep 명령어가 포팅되었다.

Microsoft Windows영어 (MS Windows)용으로는 grepWin[34]과 같이 GUI를 갖춘 형태로도 이식되었다.

7. 일상 회화에서의 사용

"grep"은 '찾다'라는 의미의 동사로 사용될 수 있다. 일반적으로 사람들이 grep 명령어가 수행하는 기능처럼 주어진 파일 내에서 검색하는 것을 말한다. Kibo는 자신의 이름을 Usenet 스풀에서 grep했다."와 같이 사용된다. ''google''이라는 동사와 비교될 수 있다. 때때로 ''visual grep''이라는 구는 무언가를 찾기 위해 텍스트를 훑어본다는 의미로 사용된다.

옥스포드 영어사전 온라인은 2003년 12월 "grep"을 명사와 동사로 등재했다.[28]

일반적으로 "You can't grep dead trees"라는 표현이 사용되기도 하는데, 이는 컴퓨터를 이용하여 grep과 같은 명령어로 검색할 수 있는 전산화된 문서가 종이로 출력된 문서(죽은 나무로 만들어진 종이)보다 더욱 편리하다는 뜻이다.[29]

참조

[1] 서적 The Unix Programming Environment https://archive.org/[...] Prentice Hall
[2] 웹사이트 “grep was a private command of mine for quite a while before i made it public.” -Ken Thompson https://medium.com/@[...] Medium 2015-05-26
[3] 문서 Hauben et al. 1997, Ch. 9
[4] 웹사이트 grep http://www.catb.org/[...] 2006-06-29
[5] 서적 The OS-9 Guru - 1 : The Facts Galactic Industrial Limited
[6] video VCF East 2019 -- Brian Kernighan interviews Ken Thompson https://www.youtube.[...] YouTube
[7] Youtube Where GREP Came From https://www.youtube.[...] Computerphile
[8] 웹사이트 ed regexes http://perl.plover.c[...] 2018-04-24
[9] 웹사이트 How Grep Got its Name http://robots.though[...] 2018-04-24
[10] 간행물 A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 http://www.cs.dartmo[...]
[11] 간행물 Survey of Global Regular Expression Print (GREP) Tools 2004-03
[12] 논문 A Tale of Two Greps 1988
[13] 서적 Algorithms and Complexity https://books.google[...] Elsevier Science 1990-09-12
[14] 웹사이트 grep http://pubs.opengrou[...] The Open Group 2015-12-12
[15] 웹사이트 pgrep(1) http://linux.die.net[...] 2015-12-12
[16] 웹사이트 grep http://perldoc.perl.[...] 2015-12-12
[17] 웹사이트 pcregrep man page http://www.pcre.org/[...] University of Cambridge 2015-12-12
[18] 웹사이트 grep(1) http://linux.die.net[...] 2015-12-12
[19] 서적 Windows 2000 administration https://archive.org/[...] Osborne/McGraw-Hill 2010-12-10
[20] 웹사이트 MSX-DOS2 Tools User's Manual by ASCII Corporation https://archive.org/[...] 1993-04
[21] 웹사이트 IBM System i Version 7.2 Programming Qshell https://www.ibm.com/[...] 2020-09-05
[22] 웹사이트 Review: Adobe InDesign CS3 - CreativePro.com https://creativepro.[...] 2018-04-24
[23] 웹사이트 InDesign Help: find/change https://helpx.adobe.[...] 2016-08-12
[24] 웹사이트 InDesign: GREP Styles (1) Setting text between parentheses in Italic http://carijansen.co[...] 2018-01-05
[25] 웹사이트 InDesign Help: GREP styles https://helpx.adobe.[...] 2016-08-12
[26] 간행물 Agrep -- a fast approximate pattern-matching tool 1992-01-20
[27] 간행물 Proper Searching 1998-06
[28] 웹사이트 New words list December 2003 https://www.oed.com/[...] 2021-12-06
[29] 문서 Jargon File
[30] 문서 search globally in the file / each lines to which the regular expression matches / print them
[31] 문서 fixed grep
[32] 문서 extended grep
[33] 문서 Linux Standard Base https://refspecs.lin[...]
[34] 문서 https://github.com/s[...]
[35] 서적 The Unix Programming Environment https://archive.org/[...] Prentice Hall
[36] 간행물 grep was a private command of mine for quite a while before i made it public.” -Ken Thompson https://medium.com/@[...] Medium 2014-02-05
[37] 웹인용 grep http://www.catb.org/[...] 2006-06-29
[38] 웹인용 grep http://perldoc.perl.[...] 2015-12-12
[39] 웹인용 pcregrep man page http://www.pcre.org/[...] University of Cambridge 2015-12-12
[40] 웹인용 grep(1) http://linux.die.net[...] 2015-12-12



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com