grep 명령어

일련의 텍스트 파일들에서 특정(패턴) 문구를 가진 문자열을 검색하게 해주는 프로그램.

 

grep 명령어는 지정한 파일 내에서 특정 문자열을 검색할 때 사용하는 명령어 입니다.

 

명령어 위치 : /bin/grep

 

사용형식 : grep [옵션] 검색할문자열

 

예1) 지정된 파일 내에서 특정문자를 찾기

httpd.conf 파일안에서 root 라는 단어를 찾아보겠습니다.

#grep root httpd.conf

  #httpd as root initially and it will switch.

위 와같은 결과가 출력되고 출력된 행안에 root 라는 단어가 포함되어 있는것을 확인 할 수 있습니다.

 

 

 

예2) 지정된 파일 내에서 특정문자가 포함된 행의 개수 출력하기

 특정문자가 포함된 행을 보여주는 것이 아니라 특정문자를 포함하고있는 행의 개수를 알고 싶다면

 -c 옵션을 사용하면 됩니다.

 httpd.conf 파일 내에 root 라는 단어를 포함하고 있는 행의 개수를 출력해 보겠습니다.

#grep -c root httpd.conf

 1

위의 결과를 보듯이 httpd.conf 파일 내에는 root를 포함하고 있는 행의 개수가 1개 임을 알 수 있습니다.

 

 

 

예3) 지정된 파일 안에서 특정문자가 포함되지 않은 행만 검색하기

지정된 파일안에서 특정문자가 포함되지 않은 행을 검색하려면 -v 옵션을 사용하면 됩니다.

test1.txt 에서 windows 라는 문자를 포함하지 않는 행을 검색해 보도록 하겠습니다.

우선 tset1.txt 파일 안의 내용을 살펴보도록 하겠습니다

#cat test1.txt

Centos linux
user name
system123

microsoft windows

 

test1.txt 파일에서 windows라는 문자가 존재하지 않는 행만 검색하고 싶다면 다음과 같이 하면 됩니다.

#grep -v windows test1.txt

Centos linux
user name
system123

위의 결과처럼 windows라는 문자가 존재하는 행을 제외한 모든행이 출력 되었습니다.

 

 

 

예4) 지정된 파일 내에서 대소문자 구분없이 특정문자 검색하기

리눅스시스템에서는 기본적으로 대소문자를 구분합니다. 하지만 대소문자의 구분 없이 검색하고 싶다면 -i 옵션을 사용하면 됩니다.

-i 옵션을 설명하기 위해서 test2.txt 라는 파일을 사용하도록 하겠습니다

우선 test2.txt 파일안의 내용을 살펴보도록 하겠습니다.

#cat test2.txt

I am system engineer
Linux is open source software

test2.txt 파일은 위와 같은 두행을 가지고 있습니다.

-i 옵션을 사용하지 않고 linux라는 단어를 검색해 보도록 하겠습니다.

#grep linux test2.txt

 

위와같이 아무런 결과가 나오지 않습니다.

이번엔 -i 옵션을 사용해보도록 하겠습니다.

#grep -i linux test2.txt

Linux is open source software

linux라는 문자를 검색했지만 -i 옵션을 사용하였기 때문에 Linux 가 포함된

Linux is open source software 라는 행이 출력 됩니다.


개인적으로 보통 grep 명령어를 아래와 같이 특정 문서를 출력하면서 연결 명령어로 주고 사용했었다.

 

 

cat [파일명] | grep [찾고자하는 문자열]

 

이러면 통상 아래와 같이 출력된다.

 

[찾고하는 문자열을 포함하는 라인의 문자열]

 

그런데 다른 사람들의 사용법을 보니 내가 사용하는 사용법보다 더 유용한 것같아 여기 정리해본다.

 

특정 폴더내에서

grep -i [찾고자하는 문자열] [디렉토리경로/*]

 

여기서 -i 옵션은 대소문자 구분을 무시하는 명령어이다.

 

디렉토리 경로는 지정하지 않으면 해당 경로내의 파일들만 검색한다.

 

[검색된 파일명]:[찾고하는 문자열을 포함하는 라인의 문자열]

 

아래와 같이 사용해도 유사한 검색 결과를 얻을 수 있다.

 

find . -type f -print | xargs grep [찾고자하는 문자열]

 

위와 같이 하면 해당 경로와 하위 경로내의 파일들을 검색하여 해당 문자열이 있는 파일을 보여준다.

 

아마 find 명령어때문에 해당 경로내의 모든 하위 경로의 파일을 검색해주는 것 같습니다.

 

[검색된 파일명]:[찾고하는 문자열을 포함하는 라인의 문자열]

 

참조: http://reebok.tistory.com/entry/grep-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%99%80-%ED%99%9C%EC%9A%A9