리눅스 grep 사용법


grep

  • 입력되는 파일에서 주어진 패턴 목록과 매칭되는 라인을 검색한 다음 표준 출력으로 검색된 라인을 복사해서 출력
  • 정렬 관련 옵션을 사용하면 정렬해 출력할 수 있음
  • grep의 검색 범위는 메모리 제한을 넘어가지 않는 범위에서 입력 라인의 제한이 없으며 하나의 라인 안의 전체적인 문자들도 매칭할 수 있음
  • 입력 파일의 마지막 바트가 newline이 아니라면 grep은 작업을 수행한다.

  • grep 메타문자
    • ^ : 라인의 시작
    • $ : 라인의 끝
    • . : 하나의 문자 매칭
    • * : 문자가 없거나 그 이상의 문자들이 매칭
    • [] : []안의 문자 중 하나라도 매칭
    • [^] : []안의 문자 중 하나도 매칭되지 않는 문자
grep [옵션] [패턴] [파일명]

일반 옵션

  • -b : 검색된 라인에 블록 번호를 붙여서 출력
  • -c : 매칭된 라인을 디스플레이하지 않고 매칭된 라인의 수를 출력
  • -h : 파일명은 출력하지 않음
  • -i : 패턴에서 사용되는 문자열에서 대소문자를 모두 검색
  • -l : 패턴에 의해 매칭된 라인이 하나라도 있는 파일의 이름만 출력. 출력시 각 파일명은 newline으로 분리
  • -n : 매칭된 라인을 출력할 때 파일상의 라인 번호를 함께 출력
  • -s : 조용히 진행. 에러 메세지를 출력하지 않음
  • -v : 패턴과 매칭되지 않는 라인만 출력
  • -w : \<\>로 둘러싸인 하나의 단어를 표현식으로 검색

예제

grep -i ls ~/.bash* | grep -v history
  • /root 디렉터리 아래에 .bas로 시작하는 모든 파일들에서 ls라는 문자열을 검색하는데, 대소문자를 구분하지 않고 모두 검색하며 결과값 중 history 문자열을 포함하지 않는 줄을 출력
grep korea /etc/passwd
echo $?
  • 검색한 내용이 존재하지 않기 때문에 검색에 실패했으므로 종료상태값은 1
ls -l | grep '^d'
  • 디렉터리만 출력
ps aux | grep '^ *multi'
  • ps aux의 출력을 grep과 파이프하고 라인 앞에 공백을 포함해 multi가 있는 라인 출력

egrep

  • grep의 확장으로서 추가적인 정규표현식 메타문자들을 사용할 수 있음
  • egrep에 추가된 메타문자들
    • + : + 앞의 문자 중 하나 이상이 매칭되는 문자
    • ? : 바로 앞의 문자 하나가 없거나 하나가 매칭되는 문자
    • a|b : a 또는 b와 매칭되는 문자(or)
    • () : 문자 그룹

fgrep

  • Fixed grep of Fast grep
  • 정규 표현식 메타문자들은 사용할 수 없기 때문에 특수 문자 및 $ 문자들은 문자 그대로 인식





© 2017. by Seongyun Byeon

Powered by zzsza