Back-End공부하는 Hero의 개발공부일기
article thumbnail

Linux 아이콘

앞서 로그 분석을 할 때 사용한 tail와 함께 자주 사용하고, 파일 내용 중 특정 문자열을 찾을 때 주로 사용하는 grep명령어에 대해서 간단하게 정리하려고 한다. 보통 grep으로 error 로그 추출이나 grep 여러개 검색, grep으로 파일생성등을 하기 위해 사용하게 된다. 

 

grep 명령어

grep명령어는 파일내의 특정 문자열을 찾을 때 사용하는 명령어다. 단순히 문자만 찾는 명령어가 옵션에 따라 문자열을 포함하거나 비포함, 라인수 등 여러 가지 방법으로 조회할 수 있다. 사용하기 쉽고 자주 사용하기 때문에 기억해 놓으면 좋겠다.  

 

grep 명령어 사용법

grep [옵션] "문자열" [파일명]
grep -i "ERROR" 2023-04-03.log

위와 같이 사용 할 수 있다. 

 

grep 명령어 옵션 ( 자주 사용하는 옵션 )

1. -i : 대소문자를 구분하지 않는다.
2. -n : 줄의 번호와 내용을 같이 검색

3. -m : 최대 출력 수 제한
4. -v : 문자가 포함되지 않는 행 검색
5. -w : 단어 단위로 문자열 검색
6. -H : 검색 결과 앞에 파일 이름 표시하여 검색
7. -r : 하위 디렉토리를 포함한 모든 파일에서 문자 검색

1. grep -i "문자열" [파일 명] 
grep -i "error" app_2023_04_03.log

2. grep -n "문자열" [파일 명] 
grep -n "error" app_2023_04_03.log -> "error"문자열이 포함된 라인 번호 출력.

3. grep -m [라인수] "문자열" [파일 명]
grep -m 50 "error" app_2023_04_03.log -> "error"문자열이 포함된 결과 50개까지 출력.

4. grep -v "문자열" [파일 명]
grep -v "error" app_2023_04_02.log -> "error"문자열이 포함되지 않은 라인 출력.

5. grep -w "문자열" [파일 명]
grep -w "error" app_2023_04_02.log -> "error"문자열(단어 단위) 포함된 라인 출력.

6. grep -H "문자열" *
grep -H "error" * -> "error"문자열이 포함된 파일 이름 표시.

7. grep -r "문자열" *
grep -r "error" * -> 하위 디렉토리에 있는 파일까지 포함하여 모든 파일에서 "error"문자열 검색
grep "error" * -> 현재 디렉토리에 있는 모든 파일 중 "error"문자열 검색

 

이외에 옵션은 아래를 참고하면 좋을 것 같다.

더보기

-E : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
-F : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
-G : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
-P : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
-e : 매칭을 위한 PATTERN 전달.
-f : 파일에 기록된 내용을 PATTERN으로 사용.
-i : 대/소문자 무시.
-v : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
-w : 단어(word) 단위로 매칭.
-x : 라인(line) 단위로 매칭.
-z : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
-m : 최대 검색 결과 갯수 제한.
-b : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
-n : 검색 결과 출력 라인 앞에 라인 번호 출력.
-H : 검색 결과 출력 라인 앞에 파일 이름 표시.
-h : 검색 결과 출력 시, 파일 이름 무시.
-o : 매치되는 문자열만 표시.
-q : 검색 결과 출력하지 않음.
-a : 바이너리 파일을 텍스트 파일처럼 처리.
-I : 바이너리 파일은 검사하지 않음.
-d : 디렉토리 처리 방식 지정. (read, recurse, skip)
-D : 장치 파일 처리 방식 지정. (read, skip)
-r : 하위 디렉토리 탐색.
-R : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
-L : PATTERN이 존재하지 않는 파일 이름만 표시.
-l : 패턴이 존재하는 파일 이름만 표시.
-c : 파일 당 패턴이 일치하는 라인의 갯수 출력.

 

출처 : https://recipes4dev.tistory.com/157

grep 명령어 자주 사용하는 검색 형식

grep명령어를 같이 사용하여 특정 단어만 출력하도록 할 수도 있다. 아래 자주 사용하는 검색 형식을 정리해 놓았다.

내가 사용할때는 보통 grep 단독으로 사용하지는 않고 tail이나 vi등 다른 명령어와 함께 사용하는 것 같다.

grep "문자열1\|문자열2" [파일명]         -> 여러 문자열을 한번에 검색
grep "문자열1" [파일명] | grep "문자열2" | grep "문자열3"    -> 여러 문자열을 한번에 검색
grep "문자열" [파일명] >> [저장할 파일명] -> *원하는 내용을 출력하여 파일로 재가공*
grep "^문자열" [파일명]                  -> 문자열로 행이 시작되는 경우 검색 
grep "^[he]" [파일명]                   -> h나 e로 시작하는 모든 행 검색
grep "문자열&" [파일명]                  -> 문자열로 행이 끝나는 경우 검색
grep "h*" [파일명]                      -> "h"로 시작하는 모든 로우 검색
grep -A2 "문자열" [파일명]               -> 해당 문자열이 들어강 행을 포함해 아래 2행 검색
grep -v "문자열" [파일명]                -> 해당 문자를 제외한 행 검색
grep "문자열" *                         -> 현재 위치의 모든파일 (*)에서 특정 문자열 검색
grep [a-c] [파일명]                     -> a,b,c로 시작하는 로우를 검색
grep "h...e" [파일명]                   -> h로 시작하고 e로 끝나는 단어 검색

위와 같이 사용하는 경우가 있으며, 정규표현식을 사용할 수 있어 응용해서 자신에게 맞게 사용할 수도 있겠다.

 

이전 게시물인 tail과 함께 보면 좋을 것 같다.

https://backhero.tistory.com/15

 

Linux - 리눅스 tail 명령어 사용법

업무를 하다 보면 서버 로그를 보거나 분석할 때 리눅스 명령어를 사용해야 하는 경우가 많다. 당연하다고 생각하고 계속 사용하였었는데 까먹거나 헷갈릴 때 계속 찾아서 그냥 정리해 놓을까

backhero.tistory.com

 

이 글을 보고 계실 선배님들께선 혹시나 잘못된 부분이 존재한다면 댓글로 알려주시면 감사하겠습니다. 😊

 

 

참고1. https://recipes4dev.tistory.com/157

참고2. https://wiseworld.tistory.com/entry

profile

Back-End공부하는 Hero의 개발공부일기

@Back-Hero

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!