본문 바로가기
IT/linux

grep / linux, 사용법, 설명, 옵션, 정규표현식, 예제

by 어느해겨울 2020. 3. 30.

grep(그렙, g/re/p)

- 텍스트 검색 기능을 가진 명령어

 

1.  사용법

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

 

2.  설명

grep(Globally find Regular-Expression and Print) 은 입력 파일을 줄단위로 읽으면서 PATTERN과 일치하는 문자열이 있는지 확인해서 출력한다.

 

3. 옵션

- F : 정규표현식을 사용하지 않고, PATTERN과 일치하는지를 단순 확인한다.

- E : 패턴일치를 확인하기 위해서 확장 정규표현식을 사용한다.

- R : 서브 디렉토리까지 패턴 일치 문자열을 찾는다. (링크 디렉토리는 찾지 않음)

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

- L : 일반적으로 출력되는 출력을 스킵하고 각각의 입력 파일을 출력한다.

      처음으로 매칭되는 파일이 나타나면 중지된다

- u : 바이너리 파일로 취급한다.

- b : 검색결과의 각 행 앞에 검색된 위치의 블록 번호 표시.

      검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는데 유용하다.

- c : 검색 결과를 출력하는 대신, 찾아낸 행의 총수를 출력한다.

- x : pattern 이 전체 줄과 일치하는 줄만 출력한다.

- q : 출력을 억제한다. 처음으로 매칭 되는 것이 발견되면 중지한다.

- y : 문자의 경우 대소문자 구분을 무시한다.

- p : 일치하는 패턴을 포함한 전체 라인을 출력한다.

- h : 파일 이름을 출력하지 않는다.

- i : 대소문자를 구분하지 않는다. (대문자와 소문자 동일 취급)

- l : 패턴이 존재하는 파일의 이름만 출력한다.

- n : 파일 내에서 행 번호를 함께 출력한다.

     (원래 문서가 가지고 있는 파일 자체의 문서번호를 출력)

- s : 에러 메시지 외에는 출력하지 않는다. 종료 상태를 검사할 때 유용하게 사용.

- v : 패턴이 존재하지 않는 행만 출력한다.

- w : 패턴 표현식을 하나의 단어로 취급하여 검색한다.

- e : PATTERN을 패턴일치 문자열로 사용한다.

- f : 패턴일치를 검사할 파일을 지정한다.

- r : 서브 디렉토리까지 패턴 일치 문자열을 찾는다.

 

4. grep에서 사용하는 정규표현식 메타 문자

메타 문자    사용 예 사용 예 설명
^  행의 시작 지시자 '^love'  love로 시작하는 모든 행과 대응
$  행의 끝 지시자 'love$'  love로 끝나는 모든 행과 대응
.  하나의 문자와 대응 'l.. e'  l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응
*  선행 문자와 같은 문자의 0개 혹은 임의 개수와 대응 ' *love'  0개 혹은 임의 개수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응(*앞에 공백이 있는 상태, 다른 문자가 있다면 그 문자가 0개 혹은 임의 개수의 문자 후에 love로 끝나는 경우를 말함)
[]  [] 사이의 문자 집합 중 하나와 대응 '[Ll]ove'  love Love를 포함하는 행과 대응
[^ ]  문자집합에 속하지 않는 한 문자와 대응 '[^A-K]love'  A K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열과 대응
\<  단어의 시작 지시자 '\<love'  love로 시작하는 단어를 포함하는 행과 대응
 (vi, grep에서 지원)
\>  단어의 끝 지시자 'love\>'  love로 끝나는 단어를 포함하는 행과 대응
 (vi,grep에서 지원)
\(..\)  다음 사용을 위해 태그를 붙인다. '\(lov\)ing'  지정된 부분을 태그1에 저장한다. 나중에 태그값을 참고하려면 \1을 쓴다. 맨 왼쪽부터 시작해 태그를 9개가지 쓸 수 있다. 왼쪽 예에서는 lov가 레지스터1에 저장되고 나중에 \1로 참고할 수 있다.
x\{m\}  문자 x m번 반복한다. 'o\{5\}'  문자 o 5회 연속적으로 나오는 모든 행과 대응
x\{m,\}  적어도 m번 반복한다. 'o\{5,\}'  문자 o가 최소한 5회 반복되는 모든 행과 대응
x\{m,n\}  m회 이상 n회 이하 반복한다. o\{5,10\}'  문자 o 5회에서 10회 사이의 횟수로 연속적으로 나타나는 문자열과 대응

 

5. 예제

 
 1. 명령) 패턴문자열과 일치하는 라인을 라인넘버까지 출력.
 grep -n sshd /etc/passwd
 
 1. 결과)
23:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
 
 
 2. 명령) /etc/inittab 내용 중 문자 x e로 시작하는 모든 행을 출력.
grep '^[xe]' /etc/inittab
 
2. 결과)
x:5:respawn:/etc/X11/prefdm -nodaemon
 
 
3. 명령) /etc/inittab에 내용 중 문자 e로 끝나는 라인의 결과와 행번호를 함께 출력.
grep -n 'e$' /etc/inittab
 
3. 결과)
11:#   1 - Single user mode
13:#   3 - Full multiuser mode
 
 
4. 명령) /var/log 디렉토리의 파일 리스트 중에 파일을 제외한 디렉토리만을 출력.
ls -l /var/log | grep "^d"
 
4. 결과)
drwxr-x---  2 root   root     4096 Feb  3  2010 audit
drwxr-xr-x  2 lp      sys      4096 Mar  6 04:02 cups
drwxr-xr-x  2 root   root     4096 Aug 27  2010 gdm
drwx------  2 root   root     4096 Feb 18 06:22 httpd
drwxr-xr-x  2 http   http     4096 Dec 21  2007 iiim
drwxr-xr-x  2 root   root     4096 Jul 18  2009 mail
drwx------  2 root   root    4096 Feb 22  2005 ppp
drwx------  2 root   root    4096 Mar  3 11:23 samba
drwxr-x---  2 squid  squid   4096 Apr 11  2008 squid
drwxr-xr-x  2 root    root    4096 Jun  2  2009 vbox
 
 
5. 명령) .php, .html, .exe로 끝나는 파일을 제외한 현재 경로 안에서 모든 파일 출력.
ls -l | grep '[ ^.php | ^.html | ^.exe ]$'
 
5. 결과)
drwxrwxrwx  10 webadmin webadmin 4096 Jan  4  2010 data
-rw-r--r--   1 webadmin webadmin     109 Jul 26  2009 dbconfig.php.bak
drwxr-xr-x   2 webadmin webadmin    4096 Jul 26  2009 extend
drwxr-xr-x   4 webadmin webadmin    4096 Jul 26  2009 geditor
-rw-r--r--   1 webadmin webadmin     78797 Jul 26  2009 HISTORY
drwxr-xr-x   5 webadmin webadmin    4096 Sep 23  2009 images

 

grep의 사용 방법은 | 를 이용한 조합에 따라 무궁무진하다.

 

 

댓글