#grep (Global Regular Expression Print)

텍스트 파일에서 원하는 문자열이 들어간 행을 찾아 출력하는 명령어

주로 log파일에서 특정 날짜, 문자로 기록된 error 메시지를 찾는데 유용하게 사용할 수 있고, 리눅스를 사용하는 사람이라면 필수적으로 익혀야하는 명령어중 하나이다.

#grep 옵션 [문자열][파일명]
-b : 문자와 일치하는 줄의 시작점 출력
-c : 문자와 일치하는 줄의 수 출력
-h : 여러 파일에서 문자열을 찾을떄, 파일이름이 붙는 것을 방지
-i : 대소문자를 구분하지 않는다.
-n : 줄의 번호와 내용을 같이 출력
-v : 문자가 포함되지 않는 행 출력
-w : 문자와 한 단어로 일치해야 출력
-l : 문자가 들어간 파일 이름을 출력
-r : 하위 디렉토리에서도 문자를 출력
-A : 특정문자 아래 추가로 여러 행 출력
-B : 특정문자 위 추가로 여러행 출력

#자주 사용하는 형식

grep "^문자열" = 문자열로 행이 시작되는 경우 출력
grep "문자열&" = 문자열로 행이 끝나는 경우 출력
grep "문자1\|문자2" = 여러 문자열을 한번에 검색
grep -A2 "문자열" = 해당 문자열이 들어간 행을 포함해 아래 2행 출력
grep -v "문자열" = 해당 문자를 제외한 행 출력
grep "문자열" * = 현재 위치의 모든파일(*)에서 특정 문자열 출력

#grep 사용의 장점

  • grep 명령어의 사용법을 익힌다면 대부분의 파일에서 원하는 내용만 따로 출력하거나 저장할 수 있다
  • 특히 리다이렉션(>,»)과 파이프라인( )을 같이 사용한다면 보다 수월하게 쓸 수 있다.
  • 파일에서 원하는 내용을 찾을 때 가장 많이 사용되는 명령어
  • 여러파일을 동시에 검색하거나 문자열을 이용해 근처 행까지 같이 출력하는 등 옵션이 많다

#grep 명령의 사용 예시 grep 사용시 파일의 원본은 그대로 유지되면서, 단지 원본 파일에서 원하는 내용만 확인하기 위해 쓰인다.

##1.하나의 파일에서 특정 문자열 찾기

    grep "문자열" [파일이름]
    #grep "DHCPACK" messages
  • 파일에서 특정 문자열이 들어간 행 출력
  • 파일의 원본은 그대로 있으며 현재 message 파일에서 grep 명령을 이용해 DHCPACK 문자가 들어간 행만 출력한다.
  1. 여러 파일에서 특정 문자열 찾기
    grep "문자열" [파일이름] [파일이름]
    ]# grep "address" message.txt message2.txt
    ]# grep "address".txt
    
    • 여러개의 파일에서 특정 문자열이 들어간 행을 출력한다
    • 파일이름은 (띄어쓰기)로 구분해도 좋고, 모든 파일을 뜻하는 *를 사용해도 좋다
    • message.txt 파일과 message2.txt 파일의 내용은 동일하다.
    • 여기서 address 문자가 들어간 행을 출력할때 띄어쓰기로 파일을 구분한 명령과 *문자로 구분한 명령의 내용이 동이랗게 출력되는 것을 확인 할 수 있다
  2. 특정 문자를 제외한 행 찾기
     grep -v "문자열" [파일이름]
     ]# grep -v "dhclienct" message.txt
    
    • 기본 message.txt 파일에서 dhclient 문자가 들어간 행을 제외한 뒤 출력하는 명령이다. 불필요한 내용을 지우고 싶을 때 유용하게 사용한다.
  3. 두 가지 문자열 한번에 찾기
     grep "문자열1\|문자열2" [파일이름]
     ]# grep "address\\prefix" messages.txt
    
    • 역슬러쉬와 파이프라인을 통해 두가지 문자열을 한번에 검색할 수있다.
    • 여기서 역슬러쉬와 달러표시는 같은 의미로 사용되기 때문에 둘 중 아무거나 사용해도 무방하다.
    • egrep이나 grep -E 옵션을 이용해서 여러 문자를 출력하여 사용하는 방법도 있으나 위 방법처럼 \를 사용해도 무방하다.
  4. 특정 문자열의 위, 아래행 추가 출력
     grep -A [문자열][파일이름]
     grep -B [문자열][파일이름]
     ]# grep -A2 "address" messsages.txt
     ]# grep -B2 "domain name" messages.txt
    
    • 특정 문자열을 기준으로 위, 아래행을 추가로 출력할 수 있는 옵션으로,
    • grep 명령어에 익숙한 사람 중에서도 생각보다 모르는 사람이 많은 옵션이다.
    • -A,B 옵션 뒤의 숫자에 따라 원하는 행을 추가로 출력할 수 있다. (-A2 = 2행을 추가로 출력)
    • 원본에서 domain name 문자가 들어간 행을 포함해 위 2행이 추가로 출력되었다.
    • 원하는 행 근처의 다른 내용을 추가로 확인할 때 유용하게 쓰인다.
  5. 파이프라인을 이용한 중복사용 후 별도로 저장하기
     grep "문자열" [파일이름]|grep "문자열"|grep "문자열"...
     grep "문자열" [파일이름] >> [따로 저장할 파일명]
     ]# cat messages.txt|grep "<info>"|grep -v "address" >> test
    
    • grep 명령과 파이프라인을 같이 사용할 경우, 텍스트 파일에서 원하는 내용을 필터처럼 여러번 걸러 사용할 수있다고 생각하면 편하다.
    • 문자열을 이용해 원하는 부분을 출력하거나, 지우는 등 파일을 재 가공할 수 있다.
    • cat messages.txt 명령으로 출력된 내용중에 파이프라인을 마치 필터처럼 사용해 원하는 내용만 걸러내는 방식으로 많이 사용된다.
   ]# cat messages.txt
  • 파일 내용 출력
     ]# cat messages.txt
    
  • 파일 내용 중 문자가 들어간 행만 출력
   ]# cat messages.txt
  • 위 출력물에서 address 문자가 들어간 행 삭제

  • 최종적인 출력물을 리다이렉션을 이용해 다른 파일에 저장한다.
  • 저장된 test 파일을 확인해 보면 위 출력물과 동일한 부분만 저장된 것을 볼 수 있다.

#출처

wiseworld.tistory.com/97