728x90
반응형
grep 명령어


◆ grep의 의미

grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다.

egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다.

fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정         규표현식의 메타문자도 일반 문자로 취급한다.



◆ grep의 동작 방법

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




- grep의 옵션



# grep -n '^jack:' /etc/passwd
(/etc/passwd 파일에서 jack을 찾는다. jack이 행의 맨 앞에 있으면 행 번호를 화면으로 출력한다.)



◆ grep과 종료 상태

grep은 파일 검색의 성공 여부를 종료 상태값으로 되돌려준다.

패턴을 찾으면 0, 패턴을 찾을 수 없으면 1, 패턴이 존재하지 않을 경우 2

sed,a자 등은 검색의 성공 여부에 대한 종료 상태값을 반환하지 않는다. 다만 구문 에러가 있을 경우에만 에러를 보고한다.






정규표현식을 사용하는 grep의 예제


# grep NW datafile

# grep NW d*

(d로 시작하는 모든 파일에서 NW를 포함하는 모든 행을 찾는다.)

# grep '^n' datafile

(n으로 시작하는 모든 행을 출력한다.)

# grep '4$' datafile

(4로 끝나는 모든 행을 출력한다.)

# grep TB Savage datafile

(TB만 인자이고 Savage와 datafile은 파일 이름이다.)

# grep 'TB Savage' datafile

(TB Savage를 포함하는 모든 행을 출력한다.)

# grep '5\.' datafile

(숫자 5, 마침표, 임의의 한 문자가 순서대로 나타나는 문자열이 포함된 행을 출력한다.)

# grep '\.5' datafile

(.5가 나오는 모든 행을 출력한다.)

# grep '^[we]' datafile

(w나 e로 시작하는 모든 행을 출력한다.)

# grep '[^0-9]' datafile

(숫자가 아닌 문자를 하나라도 포함하는 모든 행을 출력한다.)

# grep '[A-Z][A-Z] [A-Z]' datafile

(대문자 2개와 공백 1개, 그리고 대문자 하나가 연이어 나오는 문자열이 포함된 행을 출력한다.)

# grep 'ss* ' datafile

(s가 한 번 나오고, 다시 s가 0번 또는 여러번 나온 후에 공백이 연이어 등장하는 문자열을 포함한 모든 행을 출력한다.)

# grep '[a-z]\{9\}' datafile

(소문자가 9번 이상 반복되는 문자열을 포함하는 모든 행을 출력한다.)

# grep '\(3\)\.[0-9].*\1 *\1' datafile

(숫자 3,마침표,임의의 한 숫자,임의 개수의 문자,숫자 3(태그),임의 개수의 탭 문자,숫자 3의 순서를 갖는 문자열이 포한된 모든 행을 출력한다.)

# grep '\

(north로 시작하는 단어가 포함된 모든 행을 출력한다.)

# grep '\' datafile

(north라는 단어가 포함된 모든 행을 출력한다.)

# grep '\<[a-z].*n\>' datafile
(소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가 포함된 모든 행을 출력한다. 여기서 .*는 공백을 포함한 임의의 문자들을 의미한다.)





grep에 옵션 사용


# grep -n '^south' datafile

(행번호를 함께 출력한다.)

# grep -i 'pat' datafile

(대소문자를 구별하지 않게 한다.)

# grep -v 'Suan Chin' datafile

(문자열 Suan Chin이 포함되지 않은 모든 행을 출력하게 한다. 이 옵션은 입력 파일에서 특정 내용의 입력을 삭제하는데 쓰인다.

# grep -v 'Suan Chin' datafile > black

# mv black datafile

)

# grep -l 'SE' *

(패턴이 찾아진 파일의 행 번호 대신 단지 파일이름만 출력한다.)

# grep -w 'north' datafile

(패턴이 다른 단어의 일부가 아닌 하나의 단어가 되는 경우만 찾는다. northwest나 northeast 등의 단어가 아니라, north라는 단어가 포함된 행만 출력한다.)

# grep -i "$LOGNAME" datafile
(환경변수인 LOGNAME의 값을 가진 모든 행을 출력한다. 변수가 큰따옴표로 둘러싸여 있는 경우, 쉘은 변수의 값으로 치환한다. 작은따옴표로 둘러싸여 있으면 변수 치환이 일어나지 않고 그냥 $LOGNAME 이라는 문자로 출력된다.)




egrep


◆ egrep(extended grep) : grep에서 제공하지 않는 확장된 정규표현식 메타문자를 지원 / grep와 동일한 명령행 옵션을 지원


◆ egrep에서 지원하는 확장 메타문자




◆ egrep 예제

# egrep 'NW|EA' datafile

(NW나 EA가 포함된 행을 출력한다.)

# egrep '3+' datafile

(숫자 3이 한 번 이상 등장하는 행을 출력한다.)

# egrep '2\.?[0-9]' datafile

(숫자 2 다음에 마침표가 없거나 한 번 나오고, 다시 숫자가 오는 행을 출력한다.)

# egrep ' (no)+' datafile

(패턴 no가 한 번 이상 연속해서 나오는 행을 출력한다.)

# egrep 'S(h|u)' datafile

(문자 S 다음에 h나 u가 나오는 행을 출력한다.)

# egrep 'Sh|u' datafile
(패턴 Sh나 u를 포함한 행을 출력한다.)





고정 grep 과 빠른 grep
◆ fgrep : grep 명령어와 동일하게 동작한다. 다만 정규표현식 메타문자들을 특별하게 취급하지

          않는다.

# fgrep '[A-Z]****[0-9]..$5.00' file
([A-Z]****[0-9]..$5.00 이 포함된 행을 출력한다. 모든 문자들을 문자 자체로만 취급한다.)





부가 설명


◆ grep 은 가장 유용한 툴 중의 하나


◆ grep 의 주된 기능은 정규표현식에 매칭되는 문자열을 찾아서 해당 라인만을 출력하는 것


◆ 쉽게 말해, 출력결과(or 입력)에서 찾는 문자열이 있는 라인만 보여주는 기능


◆ egrep은 grep의 확장판인데 두개이상의 문자열을 검색합니다.

# netatte -ap | egrep "aaa|bbb|ccc"

하면  netstate의 결과물중 aaa 혹은 bbb 혹은 ccc가 있는 라인을 출력, 즉 or 검색이 가능


◆ grep 하위 디렉토리 까지 조회시 -r 옵션 안될경우

보통 리눅스에서는 grep -r 하위 디렉토리까지 파일을 검색 할수 있게 recursive 옵션을 지원하지만 전통? grep에는 -r 옵션이 없는지 AIX ,HP,Solaris 에서는 -r 옵션을 사용 할수 없다.

그렇다면 여기서 find 와 xargs 를 이용하여 -r 옵션과 같은 실행을 할수 있는 방법은 아래와 같다.

ex) dir : /home/search/cgi-src

        1. -r 옵션 이용 : grep -r "include"  /home/search/cgi-src

        2.  find 와 xargs  이용 : find /home/search/cgi-src | xargs grep "include"

뭐 여기서 xargs는  간단하게 말해 파이프 '|' 를 통해 입력 받아서 xargs 뒤에 있는 명령어(grep)한테 파라미터를 주는것.
반응형

'Linux' 카테고리의 다른 글

Linux chgrp  (0) 2018.08.08
Linux User 관리  (0) 2018.08.08
Linux Module  (0) 2018.08.08
Linux chkconfig  (0) 2018.08.08
Linux SAR  (0) 2018.08.08

+ Recent posts