리눅스 grep 명령어 활용방법

리눅스 GREP(Global Regular Expression Print)

리눅스에서 grep은 주로 텍스트 파일에 기록되어 있는 특정 문자열을 찾는데 유용한 명령어입니다.

몇 가지 예시를 보시며 따라 하시면 어떤 명령어인지 조금 더 쉽게 아실 수 있으실 겁니다.

 

grep

grep [옵션] [문자열, 정규표현식] [대상 파일명]

grep 사용법

# grep you test.sh

test.sh 안에서 'you'라는 텍스트를 찾아줍니다.

 

egrep

grep의 확장(expansion) 명령어로 여러 개의 문자열을 동시에 찾을 수 있습니다. grep에서 활용할 수 있는 정규표현식 외 추가로 메타문자를 지원합니다.

egrep 사용법

# egrep '(you|hello)' test.sh

you 또는(or) hello 문자를 찾아서 나타내 줍니다.

 

추가 정규표현식 문자

+ : + 앞의 정규표현식이 1회 이상 나타남

? : ? 앞의 정규표현식이 0 또는 1회 나타남

| : 문자열간의 OR연산자

( ) : 정규 표현식을 둘러 쌈

 

zgrep

압축 된 파일에서 원하는 문자열 탐색 가능

 

fgrep

문자열로만 검색한다. 특수문자 메타문자 정규표현식 등을 무시하고 일반 문자열 취급하여 검색합니다. 다른 명령어들 보다 상대적으로 속도가 빠른 장점이 있습니다.

 

추가로 정규표현식에서 \를 사용하면 \뒤에 있는 문자의 특수 의미는 무시됩니다.

 

옵션

-옵션은 대소문자를 구분한다.

 

-c, --count : 파일의 내용 대신 문자열이 들어있는 라인의 수를 출력

-n, --line-number : 문자열이 들어있는 라인번호 출력

-i, --ignore-case : 문자열의 대소문자 구분하지 않음

-l(소문자 L), --files-with-matches : 문자열 을 포함하는 파일의 이름만 출력

-r, --recursive : 서브 디렉토리의 파일까지 모두 출력

-v, --invert-match : 문자열이 제외된, 즉 문자열이 포함되어 있지 않은 라인을 출력

-e PATTERN, --regexp=PATTERN : pattern 에서 찾을 문자열 명시, 패턴으로 PATTERN을 사용("-으로 시작하는 패턴"을 보호하는데 유용)

-w, --word-regexp : pattern 이 전체 단어와 일치하는 줄만 출력, 단어의 일부로써 일치하는 경우가 아닌, 하나의 단어로써 일치하는 줄이 출력.

-x, --line-regexp : pattern 이 전체 줄과 일치하는 줄만 출력

-a, --text : 기본적으로 grep는 바이너리 파일을 처리할 수 없습니다. 그래서 바이너리파일을 텍스트파일처럼 처리할 수 있는 옵션이 -a 옵션입니다.

-A NUM, --after-context=NUM : 패턴매칭라인 이후의 라인을 NUM 수 만큼 출력

-B NUM, --before-context=NUM : 패턴매칭라인 이전의 내용을 NUM 수 만큼 출력.

-C NUM, -NUM, --context=NUM : 출력물 앞뒤 전후의 주어진 라인만큼 출력(패턴 매칭 라인은 포함하지 않고 기본 2라인)

-b, --byte-offset : 패턴매칭되기전 라인의 바이트수를 출력

 

--binary-files=TYPE :

파일 헤더가 바이너리를 포함한 파일을 가리키면 TYPE형 파일이라고 인식한다.

기본은 binary입니다.

grep는 일반적으로 바이너리 파일을 알 수 있는 하나의 메시지를 출력하거나 매치되지 않으면 메세지를 출력하지 않는다.

TYPE이 without-match 이면 grep는 바이너리파일이 매치되지 않는 걸로 생각한다.

이는 -I(대문자 I) 옵션과 같은 효과를 지닌다.

만약 TYPE이 text이면 grep은 텍스트파일로써 바이너리를 처리한다.

이는 -a 옵션과 같은 효과를 지닌다.

 

-d ACTION, --directories=ACTION :

입력파일이 디렉토리이면 ACTION 처리한다.

기본적으로 ACTION은 read이고, 이는 원본 파일인 것처럼 디렉토리가 읽는 다는 것을 의미한다.

ACTION이 skip이면 skip된다. ACTION이 recurse이면 grep은 각각의 디렉토리 이하를 순환적으로 읽어 들인다.

이는 -r 옵션과 동일합니다.

 

-E, --extended-regexp : 확장 정규표현식으로 패턴을 해석한다(=egrep 같은 의미)

-F, --fixed-strings : newline으로 분리된 고정된 문자열의 리스트로써 패턴을 해석한다(=fgrep과 같은 의미)

-f FILE, --file=FILE : 파일로부터 패턴을 얻는다(파일의 라인마다). 공백파일은 zero 패턴을 포함한다. 그러므로 매치되는것이 없다.

-G, --basic-regexp : 정규표현식으로써 PATTERN을 해석하고 이것이 기본이다

-H, --with-filename : 매칭되는 파일명을 출력

-h, --no-filename :여러 개의 파일이 검색 되었을 때 -H 옵션처럼 앞에 파일명을 출력하지 않는다

--help : help 메세지를 출력

-I(대문자 i) : 매칭된 데이터를 포함하지 않는 것처럼 바이너리 파일을 처리한다. binary-files=without-match 옵션과 동등하다

-i, --ignore-case : 주어진 패턴이나 입력파일에서 대소문자를 무시한다.

-L, --files-without-match : 일반적으로 출력되는 출력을 스킵하고 각각의 입력파일을 출력한다. 처음으로 매칭되는 파일이 나타나면 중지된다

-l, --files-with-matches : -L 과 반대

 

--mmap :

가능하면 read 시스템 콜 대신 입력을 읽어 들이는 mmap 시스템콜을 사용한다.

이 경우, 보다 나은 퍼포먼스를 유지하지만 또한, grep 작동 중 입력파일이 줄어 든다거나 I/O 에러가 발생하면 비정상적인 동작을 야기시키기도 한다

 

-q, --quiet, --silent : 출력을 억제한다. 처음으로 매칭 되는 것이 발견되면 중지한다. -s, --no-messages 옵션 참조

-r, --recursive : 하위 디렉토리를 순환적으로 모두 읽는다. -d recurse 옵션과 동등하다

 

-s, --no-messages :

존재하지 않거나 읽기 불가능한 파일에 대한 에러 메세지을 출력하지 않는다.

GNU grep과는 다르게 정통 grep은 POSIX.2 규격에 부합하지 않는다. 때문에 정통 grep은 -q 옵션이나 GNU -q 옵션같은 -s 옵션의 역할이 미미하다.

쉘 스크립트에서는 이식성을 위해 정통 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 :

유닉스 스타일의 바이트 출력한다.

이런 변환이 있기때문에 grep이 유닉스 스타일의 텍스트파일처럼 읽기가 가능해진다.

이것은 유닉스 머신에서의 grep처럼 정확한 결과를 산출할 것이다.

이 옵션은 -b 옵션이 쓰이지 않으면 소용이 없다.

MS-DOS, MS-Windows와 다른 플랫폼에서는 작동하지 않는다.

 

-V, --version : 표준에러로 grep의 버전을 출력한다.

 

-w, --word-regexp :

문자열이 하나의 단어인 경우에만 검색, 즉 전체 단어유형 매칭을 포함하는 라인만 선택한다.

이 테스트는 매칭되는 문자열이 라인의 처음에 위치하거나 non-word에 의해 선두에 와야한다. 마찬가지로, 문미에 오거나 non-word가 마지막에 와야 한다.

word-constituent 는 문자,숫자,밑줄이 될 수있다.

 

-Z, --null :

파일명 대신 0 byte 문자를 출력한다.

예를들면, grep -IZ 는 유용한 newline 문자대신 각 파일명 뒤에 0byte를 출력한다.

이 옵션은 newline과 같은 유용한 캐릭터를 포함하는 파일명까지도 출력을 명쾌하게 해준다. 이 옵션은 임의의 파일명을 처리하는 find -print0, perl -0, sort -z, xargs -0과 같은 명령어와 함께 사용될 수있고 newline 캐릭터를 포함하는 그 자체로도 사용할 수 있다.

댓글

Designed by JB FACTORY