리눅스 Grep

UNIX&LINUX/LINUX 2017. 11. 22. 13:54
728x90
반응형

◎ Grep

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

- Syntex : grep <word> <filename>

 

◇ option

문자

의미

 -b

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

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

 -c

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

 -h

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

 -i

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

 -l

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

 -n

 파일 내에서 행 번호를 함께 출력한다. (새로 검색한 목록의 행번호가 아니라 원래 문서가 가지고 있는 파일 자체의 문서번호를 출력한다.)

 -s

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

 -v

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

 -w

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

 

ex) /etc/passwd 파일 에서 root 라는 패턴을 찾아라

: grep root /etc/passwd

 

ex) ps -ef 명령어의 출력 결과에서 root를 포함하는 모든 행들이 화면에 출력되게 하라.

: ps -ef | grep root

 

ex) linux로 시작하는 행과 행 번호(n) 를 출력

: grep -n '^linux' /etc/passwd

( -n 옵션은 새로검색된 행의 행번호를 출력하지않고, 기존 문서의 행 번호를 출력한다)

 



◇ 조금더 응용하기

 

- DataFile

 

 

ex) .bak로 끝나는 행을 출력하라

: grep '.bak&' FILE


 

ex) 대문자로 시작하고 숫자로 끝나는 다섯 문자의 열이 포함된 행을 출력하라

: grep '[A-Z]...[0-9]' FILE

 

 

ex) 소문자가 적어도 아홉 개 이상 연속적으로 나오는 문자열을 포함한 모든 행을 출력하라

: grep '[a-z]\{9,\}' FILE

 

 

ex) 소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가

포함된 모든 행을 출력하라

: grep '\<[a-z].*n\>' FILE

 

 

ex) pat가 포함된 모든 행을 출력하라. (단 pat는 대 소문자를 구분하지 않는다.)

: grep -i 'pat' FILE

 

 

ex) SE 패턴이 존재하는 파일의 파일 이름을 출력하라

: grep -l 'SE' *

 

 

ex) west가 포함된 행의 총 수를 출력하라

: grep -c 'west' FILE

 

 

ex) north 단어가 있는 모든 행을 출력하라. (north가 온전한 하나의 단어일때만 출력)

: grep -w 'north' FILE

 

 

 

◎ 실습

- 핸드폰(전화) 번호 패턴을 정규표현식을 통해 정의

규칙1> 지역번호 및 통신사 번호는 '0'으로 시작하는 2자리 혹은 3자리 숫자 (ex 02, 032,010)

규칙2> 중간자리 번호 패턴은 3자리 혹은 4자리가 반드시 한 번은 나와야 한다.

규칙3> 끝자리 번호 패턴은 4자리가 반드시 한 번은 나와야 한다.

 

- DB

 

 

◇ 답 (답은 정규표현식을 쓰는 사람의 스타일에 따라 조금씩 바뀜)

 

 

◇ 풀이

 

^[0][0-9]\{1,2\}

: 0으로 시작하는 두자리 혹은 세자리 숫자

 

      ^[0]

      : 0으로 시작하는 행

 

      [0-9]\{1,2\}

      : 한개 혹은 두개의 숫자

 

-

 

\<

: 단어의 시작 지시자

 

[0-9]\{3,4\}

: 3자리 혹은 4자리의 숫자

 

\>

: 단어의 끝 지시자

 

-

 

\<

: 단어의 시작 지시자

 

[0-9]\{4\}

: 4자리의 숫자

 

$

: 행의 끝

[출처] 리눅스 Grep|작성자 리프


728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,