본문 바로가기
Server/Linux

[Linux] grep 명령어의 기본적인 사용방법

by 꼬바리 2021. 5. 26.
grep 명령의 기본옵션

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 사용시 파일의 원본은 그대로 유지되면서,

단지 원본 파일에서 원하는 내용만 확인하기 위해 쓰인다.

 

 

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

 

▶ grep "문자열" [파일이름]
]# grep "DHCPACK" messages

파일에서 특정 문자열이 들어간 행 출력

DHCPACK 문자가 들어간 행 출력

 

파일의 원본은 그대로 있으며 현재 message 파일에서 grep 명령을 이용해

DHCPACK 문자가 들어간 행만 출력한 것이다.

 

 

 

2. 여러 파일에서 특정 문자열 찾기

 

▶ grep "문자열" [파일이름] [파일이름] 
]# grep "address" messages.txt messages2.txt
]# grep "address" *.txt

 

여러개의 파일에서 특정 문자열이 들어간 행을 출력한다.

파일이름은 (띄어쓰기)로 구분해도 좋고, 모든파일을 뜻하는 *를 사용해도 좋다.

 

message.txt 파일과 messages2.txt 파일의 내용은 동일하다.

 

여기서 address 문자가 들어간 행을 출력할 때 

띄어쓰기로 파일을 구분한 명령 [grep "address" messages.txt messages2.txt]과

ALL을 뜻하는 * 문자로 구분한 명령 [grep "address" *.txt]의 내용이

동일하게 출력되는것을 확인할 수 있다.

 

파일이름에서 동일한 패턴을 찾아내어 * 를 활용하는 방법을 익히는게 좋다.

 

 

 

 

3. 특정 문자를 제외한 행 찾기

 

▶ grep -v "문자열" [파일이름]
]# grep -v "dhclient" messages.txt

 

-v 옵션은 파일에서 특정 문자를 제외한 행만 출력한다.

 

dhclient 문자를 제외한 행 출력

 

기존 messages.txt 파일에서 dhclient 문자가 들어간 행을 제외한 뒤 출력하는 명령이다.

불필요한 내용을 지우고 싶을 때 유용하게 사용한다.

 

 

 

 

4. 두 가지 문자열 한번에 찾기

 

▶ grep "문자열1\|문자열2" [파일이름]
]# grep "address\|prefix" messages.txt

 

역슬러쉬 or 달러표시 (\) 와 파이프라인 ( | ) 을 이용해

두 가지 문자열을 한 번에 검색할 수 있다.

 

여기서 역슬러쉬와 달러표시는 같은 의미로 사용되기 때문에 둘 중 아무거나 사용해도 무방하다.

파이프라인은 [Shift] + [\] 로 사용할 수 있다.

 

messages.txt 파일에서 두 가지 문자 (address, prefix)를 한 번에 출력한다.

egrep이나 grep -E 옵션을 이용해서 여러 문자를 출력하여 사용하는 방법도 있으나

위 방법처럼 \| 를 사용해도 무방하다.

 

 

 

 

5. 특정 문자열의 위,아래행 추가 출력

 

▶ grep -A [문자열] [파일이름]
▶ grep -B [문자열] [파일이름]
]# grep -A2 "address" messages.txt
]# grep -B2 "domain name" messages.txt

 

특정 문자열을 기준으로 위, 아래행을 추가로 출력할 수 있는 옵션으로,

grep 명령어에 익숙한 사람 중에서도 생각보다 모르는 사람이 많은 옵션이다.

 

-A, B 옵션 뒤의 숫자에 따라 원하는 행을 추가로 출력할 수 있다.

(-A2 = 2행을 추가로 출력)

 

address 문자를 기준으로 아래 2행 추가 출력

 

-A옵션을 사용한 결과 address 문자가 들어간 행을 포함해서 아래 2행이 추가로 출력되었다.

 

domain name 문자를 기준으로 위 2행 추가 출력

 

원본에서 domain name 문자가 들어간 행을 포함해 위 2행이 추가로 출력되었다.

원하는 행 근처의 다른 내용을 추가로 확인할 때 유용하게 쓰인다.

 

 

 

 

6. 파이프라인을 이용한 중복사용 후 별도로 저장하기

 

▶ grep "문자열" [파일이름] | grep "문자열" | grep "문자열" ...
▶ grep "문자열" [파일이름] >> [따로 저장할 파일명]
]# cat messages.txt | grep "" | grep -v "address" >> test

 

grep 명령과 파이프라인을 같이 사용할 경우,

텍스트 파일에서 원하는 내용을 필터처럼 여러번 걸러 사용할 수 있다고 생각하면 편하다.

문자열을 이용해 원하는 부분을 출력하거나, 지우는 등 파일을 재가공할 수 있다.

 

파이프라인을 이용한 중복 사용

 

cat messages.txt 명령으로 출력된 내용중에 파이프라인을 마치 필터처럼 사용해

원하는 내용만 걸러내는 방식으로 많이 사용된다.

 

]# cat messages.txt 

 = 파일 내용 출력

 

]# cat messages.txt | grep "" 

 = 파일 내용 중 문자가 들어간 행만 출력

 

]# cat messages.txt | grep "" | grep -v "address"

 = 위 출력물에서 address 문자가 들어간 행 삭제

 

 

리다이렉션을 이용한 저장

 

최종적인 출력물을 리다이렉션을 이용해 다른 파일에 저장한다.

저장된 test 파일을 확인해보면 위 출력물과 동일한 부분만 저장된 것을 볼 수 있다.

 

 

 

출처 : https://wiseworld.tistory.com/97

728x90
반응형

댓글