티스토리 뷰

Linux

[명령어] grep

나리 짱!!! naleejang 2013. 5. 30. 17:37

오늘은 리눅스를 사용하면서 가장 많이 사용했던 grep 이라는 명령어에 대해 정리를 해 볼까 합니다.

grep은 이번 프로젝트를 하면서 많이 사용했던 리눅스 명령어 인것 같습니다.


grep의 유래를 찾아보니 유닉스를 위해 만들어진 텍스트 검색 기능을 가진 명령어로써 그 이름은 유닉스 ed의 명령어로 비슷한 기능을 수행하는 g/re/p에서 유래되었다고 합니다. (참조 : http://ko.wikipedia.org/wiki/Grep)


그럼 지금부터 grep의 사용법과 옵션, 사용예제들을 살펴보도록 하겠습니다.


사용법

파일이나 표준 입력에서 패턴을 찾기 위한 명령어 ex) grep -i 'hello world' menu.h main.c

 grep [option] ... pattern [file] ...



옵션

grep에서 사용하는 옵션들은 성격에 따라 다양한 기능을 가지고 있다.


정규 표현식 (Regexp selection and interpretation) : 패턴 지정시 사용되는 정규 표현식은 작은 따옴표('')로 묵어서 표현.

  -E, --extended-regexp

  -F, --fixed-strings

  -G, --basic-regexp      

  -P, --perl-regexp

  -e, --regexp=PATTERN

  -f, --file=FILE

  -i, --ignore-case

  -w, --word-regexp

  -x, --line-regexp

  -z, --null-data  

 PATTERN을 정규 표현식으로 확장한다.

 PATTERN을 분리된 문자열로 설정한다.

 이 PATTERN은 기본 정규식이다.

 이 PATTERN은 perl 정규식이다.

 다음 PATTERN을 정규식으로 사용한다.

 파일로부터 패턴을 포함시킨다.

 다음에 오는 문자열은 제외한다.

 독립적으로 해당 문자열과 일치하는 줄을 찾는다.

 해당 라인과 일치하는 문자열만 찾는다.

 데이터가 Null일 경우 newline을 하지 않는다.


기타 기능을 위한 옵션(Miscellaneous) :

  -s, --no-messages

  -v, --invert-match

  -V, --version

  --help

  --mmap

 에러 메시지를 보여주지 않는다.

 불일치하는 라인을 보여준다.

 version 정보를 보여준다.

 help를 보여준다.

 가능한 메모리 앱을 사용한다.


출력을 위한 제어 옵션(Output control) :

  -m, --max-count=NUM

  -b, --byte-offset

  -n, --line-number

      --line-buffered

  -H, --with-filename

  -h, --no-filename

      --label=LABEL

  -o, --only-matching

  -q, --quiet, --silent

      --binary-files=TYPE

  -a, --text

  -I

  -d, --directories=ACTION  

  -D, --devices=ACTION

  -R, -r, --recursive

      --include=PATTERN

      --exclude=PATTERN

      --exclude-from=FILE

  -L, --files-without-match

  -l, --files-with-matches

  -c, --count

  -Z, --null     

 NUM과 일치되면 종료한다.

 해당라인의 offset byte를 함께 출력한다.

 해당 라인 번호를 함께 출력한다.

 모든 라인은 버퍼에 저장한다.

 매치되는 파일명을 출력한다.

 해당 파일명을 출력하지 않는다.

 표준 입력 파일명을 LABEL로 출력한다.

 패턴과 매핑되는 라인만 보여준다.

 모든 출력을 하지 않는다.

 해당 TYPE을 binary-file로 간주한다.

 -a를 사용하는 --binary files=text 와 같은 역할을 한다.

 -I를 쓰면 --binary-files=without-match 와 같은 역할을 한다.

 디렉토리를 어떻게 제어할 것인지 설정한다. ACTION에는 'read', 'recurse', 'skip'

 디바이스를 어떻게 제어할 것인지 설정한다. ACTION에는 'read', 'skip'

 --directories=recurse 옵션과 같다.

 해당 패턴을 포함한다.

 해당 패턴을 스킵한다.

 파일로터 해당 패턴을 스킵한다.

 불일치하는 파일명만 출력한다.

 일치하는 파일만 출력한다.

 파일의 일치하는 라인의 수를 카운트하여 출력한다.

 파일명이 null인 것만 출력한다.


텍스트 제어 옵션(Context control) :

  -B, --before-context=NUM

  -A, --after-context=NUM 

  -C, --context=NUM        

  -NUM                      

      --color[=WHEN],

      --colour[=WHEN] 

  -U, --binary

  -u, --unix-byte-offsets

 context를 읽어 해당 line 전만 출력한다.

 해당 라인 후만 출력한다.

 해당 라인만 출력한다.

 --context=NUM 과 같다.

 When 해당하는 단어에 표시를 한다. 예를 들만 `always', `never' 또는 `auto'.


 캐리지 리턴을 삭제하지 않는다. (MSDOS)

 캐리지 리턴이 없다면 offsets으로 출력한다. (MSDOS)


기타

`egrep' 의 뜻은 `grep -E' 이며.  `fgrep' 의 뜻은 `grep -F' 이다.



기타 예제 샘플


grep은 파일내부의 문자열을 찾을 때 많이 사용되는 명령어로 단독으로 사용할 수도 있으며, 다른 명령어와 함께 사용할 수도 있다.


- 현재 실행중인 프로세스 중 "java" 라는 단어가 포함된 프로세스를 찾을때

 ps -ef | grep java


- 현재 실행중이 프로세스 중 "java" 라는 단어가 포함된 프로세스를 찾되, grep으로 시작하는 프로세스는 제외할 때

 ps -ef | grep java | grep -v grep


- tail로  aaa 로그를 모니터링 할때 'starting' 이라는 단어가 포함된 열만 모니터링 할때

 tail -f aaa.log | grep 'starting'


- 80포트를 열고 ESTABLISH 상태인 네트워크 형태만 찾아서 출력할 때

 netstat -nat | grep 80 | grep ESTABLISH



grep에 대한 예제 샘플


grep에 대한 예제 샘플들은 사실 기존 블로그에 정말 잘 정리되어 있는 곳들이 많이 있다. 여기서는 굳이 설명하지 않고

하이퍼 링크로 대신한다. 예제까지 보고 싶은 분들은 아래 URL을 참조하시길....


http://ra2kstar.tistory.com/100

http://mwultong.blogspot.com/2006/09/grep-cygwin-find.html

댓글
댓글쓰기 폼