티스토리 뷰

컴퓨터/프로그래밍/기타

grep 명령

Rough Existence 2009. 3. 1. 22:49

목적

파일에서 패턴을 검색합니다.

구문

grep [ -E | -F ] [ -i ] [ -h ] [ -H ] [ -L ] [ -r | -R ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ File ... ]

설명

grep 명령은 Pattern 매개변수에 지정된 패턴을 검색하고 각 대응 행을 표준 출력(STDOUT)에 기록합니다. 패턴은 ed 또는 egrep 명령의 양식을 가진 정규식으로 제한됩니다. grep 명령은 간단한 비결정적 알고리즘을 사용합니다.

File 매개변수에 하나 이상의 이름을 지정할 경우, grep 명령은 대응되는 행이 들어 있는 파일의 이름을 표시합니다. 쉘에 대해 특별한 의미를 갖는 문자 ($, *, [, |, ^, (, ), ₩ )가 Pattern 매개변수에 나타날 경우에는 인용 부호로 묶어야 합니다. Pattern 매개변수가 단순한 문자열이 아닐 경우에는 패턴 전체를 작은 인용 부호로 묶어야 합니다. [a-z]와 같은 표현식에서, -(빼기 부호)는 현재 배열 순서에 따라 범위를 나타냅니다. 배열 순서는 문자 범위에서 사용할 등가 클래스를 정의할 수 있습니다. 지정된 파일이 없으면, grep은 표준 입력(STDIN)으로 간주합니다.

주:
  1. 예측 불가능한 결과가 나올 수 있으므로 특수 파일에 대해서는 grep 명령을 실행하지 마십시오.
  2. 입력 파일에는 널(NULL) 문자가 들어 있지 않아야 합니다.
  3. 입력 파일은 줄 바꾸기 문자로 끝나야 합니다.
  4. 줄 바꾸기 문자는 정규식에 의해 일치되지 않습니다.
  5. 일부 플래그가 동시에 지정될 수 있더라도, 일부 플래그는 다른 플래그를 대체합니다. 예를 들어, -l 옵션은 다른 모든 플래그에 선행합니다. -E-F 플래그를 모두 지정하면, 마지막에 지정된 플래그에 우선권이 있습니다.
플래그

-b
발견된 블록 번호가 각 행보다 우선합니다. 이 플래그는 문맥별 디스크 블록 번호를 찾는 데 유용합니다. -b 플래그는 stdin이나 파이프의 입력과 같이 사용할 수 없습니다.

-c
대응 행의 계수만 표시합니다.

-E
지정된 각 패턴을 ERE(Extended Regular Expression!)으로 취급합니다. ERE의 널(NULL) 값을 각 행에 대응합니다.

주:- E 플래그가 있는 grep 명령은 egrep 명령과 같습니다. 단, 오류 및 사용법 메시지가 다르고 -s 플래그의 기능이 다릅니다.

-e PatternList
하나 이상의 검색 패턴을 지정합니다. 이것은 단순한 패턴과 같이 작용하지만, 패턴이 -(빼기 부호)로 시작할 때 유용합니다. 패턴은 캐리지 리턴 문자로 분리되어야 합니다. 널(NULL) 패턴은 인접한 두 캐리지 리턴 문자나 캐리지 리턴 문자 ("₩n)가 따라오는 인용 부호로 지정될 수 있습니다. -E-F 플래그를 지정하지 않으면, 각 패턴을 BRE(Basic Regular Expression!)과 같이 취급합니다. grep는 여러 개의 -e-f 플래그를 승인합니다. 행을 대응할 때 지정된 패턴은 모두 사용되지만 평가 순서는 지정되어 있지 않습니다.

-F
각각 지정된 패턴은 정규식 대신 문자열로 취급합니다. 널(NULL) 문자열은 각 행에 대응합니다.

주:- F 플래그가 있는 grep 명령은 fgrep 명령과 같습니다. 단, 오류 및 사용법 메시지가 다르고 -s 플래그의 기능이 다릅니다.

-fPatternFile
검색 파일이 있는 파일을 지정합니다. 각 패턴은 캐리지 리턴 문자로 분리되어야 하고, 빈 행을 널(NULL) 패턴으로 생각합니다. -E-F 플래그를 지정하지 않으면, 각 패턴을 BRE(Basic Regular Expression!)로 취급합니다.

-h
대응되는 행이 포함되어 있는 파일의 이름이 해당 행에 추가되는 것을 방지합니다. 복수 파일을 지정할 때 파일 이름을 억제합니다.

-H
-r 또는 -R 옵션을 지정하고 유형 디렉토리의 파일을 참조하는 기호 링크를 명령행에 지정할 경우, grep는 기호 링크가 참조하는 디렉토리의 파일과 그 아래에 있는 파일 계층의 모든 파일을 검색합니다.

-i
비교할 때 케이스(대문자 또는 소문자)를 무시합니다.

-l
대응 행이 있는 파일의 이름을 한 번만 나열합니다. 각 파일 이름을 캐리지 리턴 문자로 분리합니다. 표준 입력(STDIN)을 검색할 때, 경로 이름(StandardInput)을 리턴합니다. -c-n 플래그와 결합한 -l 플래그는 -l 플래그처럼 행동합니다.

-L
-r 또는 -R 옵션을 지정하고 유형 디렉토리의 파일을 참조하는 기호 링크를 명령행에 지정하거나 파일 계층 순회 중 발견된 경우, grep는 기호 링크가 참조하는 디렉토리의 파일과 그 아래에 있는 파일 계층의 모든 파일을 검색합니다.-H-L 모두 지정할 경우, 명령행에 지정된 마지막 옵션이 적용됩니다.

-n
파일의 상대 행 번호가 각 행을 선행합니다. 각 파일은 행 1에서 시작하고, 처리하는 각 파일에 대해 행 계수기를 다시 설정합니다.

-p[Separator]
대응 행이 들어 있는 전체 단락을 표시합니다. 단락을 단락 분리 문자로 분리하고, Sopatator 매개변수로 지정하는데, 단락은 검색 패턴과 같은 양식의 패턴입니다. 단락 분리문자가 들어 있는 행은 분리문자로서만 사용되며 출력에는 결코 포함되지 않습니다. 디폴트 단락 분리 문자는 공백 행입니다.

-q
대응 행에 관계없이 표준 출력(STDOUT)에 대한 모든 쓰기를 억제합니다. 입력 행을 선택하면, 0 상태로 종료합니다. -c, -l-n 플래그와 결합한 -q 플래그는 -q 플래그처럼 행동합니다.

-r
디렉토리를 반복적으로 검색합니다. 디폴트로, 디렉토리에 대한 링크를 따라갑니다.

-R
디렉토리를 반복적으로 검색합니다. 디폴트로, 디렉토리에 대한 링크를 따라가지 않습니다.

-s
존재하지 않거나 읽을 수 없는 파일에 대해 나타내는 오류 메시지를 억제합니다. 다른 오류 메시지는 억제하지 않습니다.

-v
지정된 패턴과 일치하지 않는 행을 모두 나타냅니다.

-w
단어 검색을 수행합니다.

-x
추가 문자 없이 지정된 패턴과 정확히 일치하는 행을 나타냅니다.

-y
비교할 때 대소문자 구분을 무시합니다.

PatternList
검색 중에 사용하는 하나 이상의 패턴을 지정합니다. 이 패턴을 -e 플래그를 사용하여 지정된 것처럼 취급합니다.

File
패턴을 검색할 파일 이름을 지정합니다. 어떤 File 변수도 제공되지 않은 경우, 표준 입력(STDIN)을 사용합니다.

종료 상태

이 명령은 다음 종료값을 리턴합니다.

0
일치를 발견했습니다.

1
일치를 발견하지 못했습니다.

>1
구문 오류가 발견되었거나 파일에 액세스할 수 없습니다(대응사항이 발견되었을 경우에도 해당).

예제
  1. 패턴 대응 문자 ?, [, ], ₩(, ₩), ₩{, and ₩}의 일부가 속한 패턴을 사용하려면, 다음을 입력하십시오.

    grep  "^[a-zA-Z]"  pgm.s 

    이것은 첫 문자가 글자(letter)인 pgm.s의 모든 행을 표시합니다.

  2. 패턴에 일치하지 않는 행을 모두 표시하려면, 다음을 입력하십시오.

    grep   -v  "^#" pgm.s

    이것은 첫 문자가 #(파운드 기호)가 아닌 pgm.s의 모든 행을 표시합니다.

  3. abc 또는 xyz 문자열과 대응하는 file1의 모든 행을 표시하려면, 다음을 입력하십시오.

    grep   -E  "abc|xyz"  file1

  4. test2라는 파일에서 $(달러 기호)를 검색하려면, 다음을 입력하십시오.
    grep ₩₩$ test2

    쉘이 강제로 ₩$(단일 백슬래시, 달러 기호)를 grep 명령에 전달하기 위해서 ₩₩(더블 백슬래시) 문자가 필요합니다. (단일 백슬래시) 문자는 grep 명령에게 다음 문자(여기서는 $)를 표현 문자가 아닌 리터럴 문자로 취급하도록 지시합니다. 백슬래시와 같은 이스케이프 문자를 사용하지 않도록 하려면 fgrep 명령을 사용하십시오.

  5. /tmp를 통해 순환적으로 검색하여 디렉토리를 지시하는 링크에서 순환하지 않고 IBM 단어를 갖는 파일을 찾으려면 다음을 입력하십시오.
    grep –R IBM /tmp
    또는
    grep –r -H IBM /tmp
  6. /tmp를 통해 순환적으로 검색하여 IBM 단어를 가지고 있고 링크에서도 순환하는 파일을 찾으려면 다음을 입력하십시오.
    grep –r IBM /tmp
    또는
    grep -R -L IBM /tmp