tail head cat sleep
QR code linking to this page

Man page  — GREP

명칭

grep, egrep, fgrep, zgrep - 패턴에 매치 하는 행을 표시한다

내용

서식

grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]

해설

grep (은)는, FILE 그리고 이름을 지정된 입력 파일 (파일이 지정되지 않은지, file 의 부분에 - 하지만 지정되었을 경우는 표준 입력)을 읽어들여, 주어졌다 PATTERN 에 매치 하는 부분을 포함한 행을 찾습니다. 디폴트 동작에서는, grep (은)는 매치 한 행을 표시합니다.

게다가 2 개의 프로그램 egrep (와)과 fgrep (을)를 이용 가능합니다. egrepgrep -E (와)과 같습니다. fgrepgrep -F (와)과 같습니다. zgrepgrep -Z (와)과 같습니다.

옵션

-A NUM, --after-context=NUM
  NUM 그리고 지정한 행수만큼, 패턴에 매치 한 행의 뒤의 행도 표시합니다.
-a, --text
  바이노리필드를 텍스트 파일인것 같이 처리합니다. 이것은 --binary-files=text 옵션과 등가입니다.
-B NUM, --before-context=NUM
  NUM 그리고 지정한 행수만큼, 패턴에 매치 한 행의 전의 행도 표시합니다.
-C [NUM], -NUM, --context[=NUM]
  NUM 그리고 지정한 행수 (디폴트는 2)만큼, 패턴에 매치 한 행의 전후의 행도 표시합니다.
-b, --byte-offset
  각 출력행의 전에, 입력 파일의 선두로부터의 바이트 단위의 오프셋(offset)를 표시합니다.
--binary-files=TYPE
  파일의 최초의 수바이트가, 파일의 내용이 바이노리필드인 것을 나타내는 경우, 파일의 타입을 TYPE 이라고 가정합니다. 디폴트에서는 TYPEbinary (이어)여, grep (은)는 통상, 바이노리필드의 일치를 나타내는 일행 메세지를 표시하는지, 매치 하지 않는 경우에는 아무것도 표시하지 않습니다. TYPE 하지만 without-match 의 경우, grep (은)는 바이노리필드는 매치 하지 않는 것과 가정합니다. 이것은 -I 옵션과 등가입니다. TYPE 하지만 text 의 경우, grep (은)는 바이노리필드를 텍스트인것 같이 취급합니다. 이것은 -a 옵션과 등가입니다. 경고: grep --binary-files=text (은)는 바이너리의 쓰레기를 표시할 가능성이 있습니다. 출력처가 단말인 경우로, 단말 드라이버가 이 쓰레기의 일부를 명령이다고 해석하는 경우, 이 쓰레기가 나쁜 부작용을 미 가능성이 있습니다.
-c, --count
  통상의 출력은 하지 않고, 각 입력 파일에 대해 매치 한 행수를 표시합니다. -v, --invert-match 옵션과 함께 지정했을 경우는, 매치 하지 않았던 행수를 표시합니다 (아래와 같이 참조).
-d ACTION, --directories=ACTION
  입력 파일이 디렉토리의 경우에, ACTION (을)를 사용해 그 처리를 실시합니다. 디폴트에서는 ACTIONread (이어)여, 디렉토리를 보통 파일일까와 같이 읽어내는 일을 의미합니다. ACTION 하지만 skip (이)라면, 디렉토리를 입다물고 읽어 날립니다. ACTION 하지만 recurse (이)라면, grep 는 각 디렉토리하의 모든 파일을 재귀적으로 읽어냅니다. 이것은 -r 옵션과 등가입니다.
-E, --extended-regexp
  PATTERN (을)를 확장된 정규 표현으로서 취급합니다 (아래와 같이 참조).
-e PATTERN, --regexp=PATTERN
  PATTERN (을)를 패턴으로서 지정합니다. - 그리고 시작되는 패턴을 보호하기 위해서 유효합니다.
-F, --fixed-strings
  PATTERN (을)를 개행으로 단락지어진 고정 캐릭터 라인의 리스트로서 취급합니다. 그 캐릭터 라인의 어떤 것일까하고 매치 할까를 조사합니다.
-f FILE, --file=FILE
  패턴을 FILE (으)로부터 1 행 마다 읽어들입니다. 하늘의 파일은 패턴을 포함하지 않기 때문에, 아무것도 매치 하지 않습니다.
-G, --basic-regexp
  PATTERN (을)를 기본적인 정규 표현으로서 취급합니다 (아래와 같이 참조). 디폴트입니다.
-H, --with-filename
  각각의 매치에 대해서 파일명을 표시합니다.
-h, --no-filename
  복수 파일을 검색했을 때에, 출력 전에 파일명을 붙이는 것을 억제합니다.
--help
  간단한 헬프 메세지를 출력합니다.
-I 바이노리필드를 매치 하는 데이터를 포함하지 않는 것처럼 처리합니다. 이것은 --binary-files=without-match 옵션과 등가입니다.
-i, --ignore-case
  PATTERN (이)라고 입력 파일의 쌍방에서, 영대 캐릭터와 소문자의 구별을 하지 않게 합니다.
-L, --files-without-match
  통상의 출력은 하지 않고, 이 옵션을 지정하지 않았을 때에 전혀 출력되지 않는 입력 파일의 이름을 표시합니다. 스캔 동작은 최초의 매치으로 종료합니다.
-l, --files-with-matches
  통상의 출력은 하지 않고, 이 옵션을 지정하지 않았을 때에 출력되는 입력 파일의 이름을 표시합니다. 스캔 동작은 최초의 매치으로 종료합니다.
--mmap
  가능하면, 디폴트의 read(2) 시스템 콜 대신에 mmap(2) 시스템 콜을 사용해 입력을 읽어냅니다. 어느 상황에 있어, --mmap (은)는 보다 좋은 성능을 가져옵니다. 그러나, grep 의 동작중에 입력 파일이 작아지는지, 또는 I/O 에러가 생겼을 경우에, --mmap (은)는 (코어덤프를 포함한다) 미정도리의 동작을 일으킬 가능성이 있습니다.
-n, --line-number
  각 출력행의 전에, 입력 파일에 있어서의 행 번호를 표시합니다.
-q, --quiet, --silent
  침묵. 통상의 출력을 억제합니다. 스캔 동작은 최초의 매치으로 종료합니다. 아래와 같은 -s (이)나 --no-messages 옵션도 참조.
-r, --recursive
  각 디렉토리하의 모든 파일을 재귀적으로 읽어냅니다. 이것은 -d recurse 옵션과 등가입니다.
-s, --no-messages
  지정된 파일이 존재하지 않는 것이나 읽을 수 없는 것을 나타낸다 에러 메세지를 억제합니다. 이식성에 관한 주: GNU grep 과는 달리, 전통적인 grep (은)는 POSIX. 2 에 적합하고 있었었습니다. 왜냐하면, 전통적인 grep 에는 -q 옵션이 없고, -s 옵션은 GNU grep-q 옵션과 같이 동작했기 때문에입니다. 전통적인 grep 에 이식 가능한 것을 의도한 셸 스크립트는, -q (와)과 -s (을)를 양쪽 모두 사용하지 않고 , 출력을 /dev/null 에 리디렉트 해야 합니다.
-U, --binary
  파일을 바이너리로서 취급합니다. 디폴트에서는, MS-DOS 와 MS-Windows 환경하에서 grep (은)는, 파일로부터 읽어낸 최초의 32KB 의 내용을 봐, 파일 타입을 추측합니다. grep (은)는 파일을 텍스트 파일이라고 판단했을 경우, 오리지날의 파일 내용으로부터 ( ^ (와)과 $ 하지만 사용되고 있는 정규 표현을 올바르게 동작시키기 위해서(때문에) ) CR 캐릭터를 없앱니다. -U (을)를 지정하면(자), 이 억측을 억제해, 모든 파일을 읽어내 매치 기구에 그대로 건네줍니다. 만약 파일이 각 행의 말미에 CR/LF 의 조를 가지는 텍스트 파일이라면, 이 옵션은 정규 표현을 도움이 되고 없애게 하는 일이 있겠지요. 이 옵션은 MS-DOS 와 MS-Windows 이외의 플랫폼에서는 효과가 없습니다.
-u, --unix-byte-offsets
  unix 형식의 바이트 단위 오프셋(offset)를 보고합니다. 이 스윗치를 지정하면(자) grep (은)는, 파일이 unix 형식의 텍스트 파일, 즉, CR 캐릭터가 제거된 파일일까와 같이에 바이트 단위 오프셋(offset)를 보고합니다. 이것은 grep (을)를 Unix 머신으로 동작시킨 것과 같은 결과를 생성합니다. 이 옵션은 -b 옵션도 사용하지 않는 한 효과가 없습니다. MS-DOS 와 MS-Windows 이외의 플랫폼에서는 효과가 없습니다.
-V, --version
  grep 의 버젼 번호를 표준 에러 출력에 표시합니다. 버그 리포트 에는, 이 번호를 부기해 주세요 (아래와 같이 참조).
-v, --invert-match
  결과를 반전해, 매치 하지 않았던 행을 선택합니다.
-w, --word-regexp
  완전한 말에 매치 하는 행만을 선택합니다. 매치 하는 부분 캐릭터 라인이 줄머리로부터 시작되어 있는지, 단어 구성 캐릭터 이외의 캐릭터가 전에 있는 것이 테스트됩니다. 같이 매치 하는 부분 캐릭터 라인이 줄 끝까지 있는지, 단어 구성 캐릭터 이외의 캐릭터가 후에 있을 필요가 있습니다. 단어 구성 캐릭터란, 레터·숫자·언더스코어입니다.
-x, --line-regexp
  행 전체와 정확하게 매치 하는 행만을 선택합니다.
-y -i (와)과 같은 의미를 가지는 구식의 옵션입니다.
--null
  통상 파일명의 뒤에 계속되는 캐릭터 대신에 바이트 0 (ASCII NUL 캐릭터)를 출력합니다. 예를 들면, grep -l --null (은)는 각 파일명의 뒤에, 통상의 newline 는 아니고 바이트 0 을 출력합니다. 이 옵션을 지정하면(자), newline 등의 예외적인 캐릭터를 포함한 파일명에 직면했을 경우에서도 출력이 명백하게 됩니다. 이 옵션을 find -print0, perl -0, sort -z, xargs -0 등의 명령와 함께 사용하면, 임의의 파일명을 처리할 수 있습니다. 파일명이 newline 캐릭터를 포함하고 있어도 처리 가능합니다.
-Z, --decompress
  검색을 개시하기 전에 입력 데이터를 신장 합니다. 이 옵션은 zlib 프로그램 라이브러리와 함께 컴파일 했을 경우만 사용 가능합니다.

정규 표현

정규 표현은, 캐릭터 라인의 집합을 표현하는 패턴의 일입니다. 수식 표현과 같게, 보다 작은 표현을 조합하는 다양한 연산자를 이용하는 일로, 정규 표현을 조립합니다.

grep (은)는, 「기본」정규 표현과 「확장」정규 표현의 2 종류의 정규 표현 문법을 취급할 수가 있습니다. GNU grep 그럼, 어느 쪽의 정규 표현 문법도 기능적인 차이는 없습니다. 다른 실장에서는, 기본 정규 표현은 확장 정규 표현보다 능력이 낮아지고 있습니다. 여기에서는, 확장 정규 표현에 대해 설명합니다. 기본 정규 표현과의 차이는, 그 후에 설명합니다.

정규 표현의 기본 단위는, 1 캐릭터에 매치 하는 정규 표현입니다. 레터와 숫자를 포함한 많은 캐릭터는, 그것 자신에게 매치 하는 정규 표현입니다. 또, 특수한 의미를 가지는 메타 캐릭터도, 그 캐릭터의 전에 backslash (을)를 붙이면(자), 그 본래의 캐릭터에 매치 하게 됩니다.

[ (와)과 ] 그리고 둘러싸인 캐릭터의 리스트는, 그 리스트중에 포함되는 어떤 것이나 1 캐릭터에 매치 합니다. 다만, 리스트의 선두가 caret ^ 의 경우는, 그 리스트에 포함되고 없다 캐릭터에 매치 합니다. 예를 들면, 정규 표현 [0123456789] (은)는 숫자 1 캐릭터에 매치 합니다. 캐릭터의 범위는 최초와 마지막 캐릭터를 하이픈 (`-')으로 잇는 것으로 지정할 수 있습니다. 마지막으로, 특정의 이름을 가지는 캐릭터 클래스가 미리 정의되고 있습니다. 이름이 내용을 나타내고 있어 그것들은, [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:] 입니다. 예를 들면, [[:alnum:]][0-9A-Za-z] (와)과 같습니다만, 후자는 POSIX 로케일이나 ASCII 코드순서에 의존하기 때문에, 전자가 로케일이나 캐릭터 집합에 의존하지 않습니다. (클래스명안의 꺽쇄묶음은 심볼명의 일부이며, 리스트를 단락짓는 꺽쇄묶음과는 따로 지정할 필요가 있는 것에 주의) 리스트 중(안)에서는, 대부분의 메타 캐릭터는 통상의 캐릭터로서 다루어집니다. 리터럴 ] (을)를 포함하려면 , 이 캐릭터를 리스트의 선두에 두어 주세요. 같이 리터럴 ^ (을)를 포함하려면 , 이 캐릭터를 리스트의 선두 이외에 두어 주세요. 리터럴 - (을)를 포함하려면 , 이 캐릭터를 리스트의 마지막에 두어 주세요.

피리어드 . (은)는, 임의의 1 캐릭터에 매치 합니다. 심볼 \w[[:alnum:]] (와)과 같은 의미로, 심볼 \W[^[:alnum:]] (와)과 같은 의미입니다.

caret ^ 라고 달러 기호 $ (은)는, 각각 줄머리와 줄 끝의 공문자열에 매치 하는 메타 캐릭터입니다. 심볼 \< (와)과 심볼 \> (은)는, 각각 단어의 선두와 말미의 공문자열에 매치 하는 메타 캐릭터입니다. 심볼 \b (은)는 단어의 구석의 공문자열에 매치 합니다. 심볼 \B (은)는 단어의 구석 이외 의 공문자열에 매치 합니다.

정규 표현의 뒤에는, 반복 연산자의 어떤 것인가가 계속되는 일이 있습니다.
? 직전의 항목은 옵션이며, 최대 1 회 매치합니다.
* 직전의 항목은 0 회 이상 매치합니다.
+ 직전의 항목은 1 회 이상 매치합니다.
{n} 직전의 항목은 엄밀하게 n 회매치합니다.
{n,} 직전의 항목은 n 회이상 매치합니다.
{n,m}
  직전의 항목은, 최저 n 회, 최대 m 회매치합니다.
2 개의 정규 표현은 결합 가능합니다. 결과적으로 완성되는 정규 표현은, 결합된 2 개의 부분 표현에 각각 매치 한다 2 개의 부분 캐릭터 라인을 결합한 임의의 캐릭터 라인에 매치 합니다.

2 개의 정규 표현은 안 두어 형태 연산자 | 그리고 연결하는 것이 가능합니다. 결과적으로 완성되는 정규 표현은, 어느 쪽인가의 부분 표현에 매치 하는 임의의 캐릭터 라인에 성냥 합니다.

반복은 결합에 우선합니다. 또 결합은 선택에 우선합니다. 이러한 우선 규칙을 무효와 하기 위해서, 부분 표현 전체를 괄호로 둘러싸는 것이 가능합니다.

n 하지만 1 개의 숫자인 것 같은 후방 참조 \n (은)는, 정규 표현중의 괄호로 둘러싸였다 n 번째의 부분 표현이 매치 한 캐릭터 라인과 성냥 합니다.

기본 정규 표현에서는, 메타 캐릭터 ?, +, {, |, (, ) (은)는, 그 특수한 의미를 잃습니다. 대신에, backslash를 붙였다 \?, \+, \{, \|, \(, \) (을)를 사용해 주세요.

전통적인 egrep (은)는, 메타 캐릭터 { (을)를 서포트하지 않았습니다. 또, 이 메타 캐릭터 대신에 \{ (을)를 서포트한다 egrep 실장도 몇개인가 존재하므로, 이식 가능한 스크립트에서는, 리터럴 { 에 매치 시키기 위해서(때문에) egrep 패턴으로 { (을)를 사용하는 것은 피해 [{] (을)를 사용해야 합니다.

GNU egrep (은)는, { 하지만 부정한 범위 지정의 시작이다면 특수 캐릭터는 아니다, 라고 상정해, 전통적인 사용법의 서포트를 시도합니다. 예를 들면, 쉘 명령 egrep '{1' (은)는 정규 표현의 문법 에러를 보고하지 않고 , 2 캐릭터의 캐릭터 라인 {1 (을)를 검색합니다. POSIX. 2 는, 이 동작을 하나의 확장으로서 허가하고 있습니다만, 이식 가능한 스크립트에서는 이 사용법을 피해야 합니다.

환경 변수

GREP_OPTIONS
  이 변수는 명시적인 옵션의 전으로 지정되는 디폴트 옵션을 지정합니다. 예를 들면, 만약 GREP_OPTIONS 하지만 '--binary-files=without-match --directories=skip' 인 경우, grep (은)는 2 개의 옵션 --binary-files=without-match (와)과 --directories=skip 하지만 명시적인 옵션의 전으로 지정되어 있는 것처럼 동작합니다. 옵션의 지정은 공백에 의해 단락지어집니다. backslash는 다음의 캐릭터를 이스케이프 합니다. 이것은 공백이나 backslash를 포함한 옵션을 지정하기 위해서 이용됩니다.
LC_ALL, LC_MESSAGES, LANG
  이러한 변수는 grep 하지만 메세지에 사용하는 언어를 결정한다 LC_MESSAGES (을)를 지정합니다. 로케일은 이러한 변수의 쳐 최초로 설정되어 있는 것에 의해 결정됩니다. 만약 이러한 변수 모두가 설정되어 있지 않은 경우, 또는 메세지 카탈로그가 인스톨되어 있지 않은 경우, 또는 grep 하지만 국제 언어 서포트 인화성 (NLS)으로 컴파일 되지 않은 경우에는, 아메리칸 영어가 이용됩니다.
LC_ALL, LC_CTYPE, LANG
  이러한 변수는, 예를 들면 어느 캐릭터가 공백 나다니고 등, 캐릭터의 종류를 결정한다 LC_CTYPE (을)를 지정합니다. 로케일은 이러한 변수의 쳐 최초로 설정되어 있는 것에 의해 결정됩니다. 만약 이러한 변수 모두가 설정되어 있지 않은 경우, 또는 메세지 카탈로그가 인스톨되어 있지 않은 경우, 또는 grep 하지만 국제 언어 서포트 인화성 (NLS)으로 컴파일 되지 않은 경우에는, POSIX 로케일이 이용됩니다.
POSIXLY_CORRECT
  설정되어 있는 경우, grep (은)는 POSIX. 2 로서 동작해, 그 이외의 경우는 grep (은)는 다른 GNU 프로그램과 같이 동작합니다. POSIX. 2 에서는 파일명의 뒤에 계속되는 옵션은 파일명으로서 다루어집니다. 디폴트에서는, 이러한 옵션은 오퍼랜드리스트의 선두에 줄서 바꿀 수 있어, 옵션으로서 다루어집니다. 또, POSIX. 2 에서는 인식할 수 없는 옵션은 `` 불법 (illegal)'' 이다고 진단됩니다만, 법률에 위반하고 있는 것은 아니기 때문에, 디폴트에서는 이것들은``부정 (invalid)'' 이다고 진단됩니다.

진단

통상, 패턴에 매치 한 행이 발견되었을 경우는 0 을, 발견되지 않았던 경우는 1 을 돌려줍니다. (다만, -v 옵션을 지정했을 경우는, 거꾸로 됩니다. ) 패턴에 문법 에러가 존재하거나 입력 파일에 액세스 할 수 없는등의 시스템 우류가 발생했을 경우는, 2 를 돌려줍니다.

버그

버그 리포트는, bug-gnu-utils@gnu.org 까지 Email 해 주세요. 이 때,``Subject:'' 의 어디엔가 ``grep'' 라고 하는 단어를 잊지 않고 넣어 주세요.

{m,n} 의 표현으로 매우 큰 반복을 지정하면(자), 매우 많은 메모리를 소비합니다. 게다가 어떤 종류의 애매한 정규 표현을 지정하면(자), 필요한 시간과 메모리 area는 지수적으로 증대해, grep 하지만 메모리 부족을 일으킬 가능성이 있습니다.

후방 참조는 매우 동작이 늦고, 필요한 시간은 지수적으로 증대합니다.


v GREP (1) GNU Project

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

LISP = Lots of Irritating Silly Parentheses