리눅스2015. 2. 5. 14:39

리눅스 grep 명령어에 대해 알아보자.


grep 명령어

리눅스에서 파일 전체를 뒤져 정규 표현식에 대응하는 모든 행을 출력하는 명령어에 대해 알아보자.

grep 명령어는 입력되는 파일에서 주어진 패턴 목록과 매칭되는 라인을 검색한 다음 표준 출력으로 검색된 라인을 복사해서 출력해 준다. 또한, 정렬 관련 옵션을 사용하면 정렬하여 출력할 수도 있다.

grep [옵션] [패턴] [파일]

옵션

-b: 검색된 라인에 블록 번호를 붙여서 출력한다. 검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는 데 유용하다.

-c: 매칭된 라인을 디스플레이하지 않고 매칭된 라인의 수를 출력한다. (찾아낸 행의 총수를 출력)

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

-i: 패턴에 사용되는 문자열의 대소문자를 무시하고 검색한다. (대문자와 소문자 동일 취급)

-l: 패턴에 의해 매칭된 라인이 하나라도 존재하는 파일의 이름만 출력한다.

-n: 매칭된 라인을 출력할 때 파일 상의 라인 번호를 함께 출력한다. (새로 검색한 목록의 행 번호가 아니라 원래 문자가 가지고 있는 파일 자체의 라인 번호를 출력한다.)

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

-v: 패턴과 매칭되지 않는 라인만 출력한다.

-w: \<과 \>로 둘러싸인 하나의 단어도 표현식을 검색한다. 즉, 패턴 표현식을 하나의 단어로 취급하여 검색한다.

grep 명령어는 파일에서 지정된 패턴에 따라 특정 텍스트를 찾는 용도로도 쓰이며 많은 옵션을 가진 강력한 명령어 중 하나이다.

보통 파이프(|)와 함께 많이 쓰이기 때문에 다양한 사용법을 알아보자.

/etc/passwd 파일에서 corej 패턴을 찾아라.

[corej@localhost ~]$ grep corej /etc/passwd

현재 리눅스에서 돌아가고 있는 프로세스 중 java 상태만 확인해 보자.

[corej@localhost ~]$ ps -ef | grep java

find 명령어와 함께 파일 내용을 검색해 보자. (-i 옵션을 이용해서 대소문자 구분 없이 검색)

(find 명령어에 대한 자세한 내용은 리눅스 find 명령어 포스트 참고)

[corej@localhost ~]$ find ./ -name "*.sql" | xargs grep -i corej

패턴에 정규 표현식(regular expression)을 사용해서 더욱 유용하게 사용할 수 있다.

정규 표현식에 대해서는 다음에 더 자세하게 알아보기로 하고 일단 정규 표현식을 활용한 몇 가지 예만 더 보자.

/etc/passwd 파일에서 corej로 시작하는 라인을 찾아라.

[corej@localhost ~]$ grep "^corej" /etc/passwd

hello.txt 파일에서 World로 끝나는 라인을 출력하는데 라인 번호(문서 상)도 함께 출력하라.

[corej@localhost ~]$ grep -in "world$" ./hello.txt


코어제이 홈페이지 제작 소개


코어제이 캔디 앱 소개


Posted by 코어제이