Grep
"오늘의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]
`grep`의 일반적인 사용 예는 다음과 같다:
grep 명령어의 기본적인 사용법은 다음과 같다.
톰슨은 리 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. 사용
```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 옵션 패턴 파일
파일은 여러 개를 지정할 수 있으며, 생략하면 표준 입력에서 검색한다.
옵션에는 다음과 같은 것들이 있다.
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