앞서 로그 분석을 할 때 사용한 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 : 파일 당 패턴이 일치하는 라인의 갯수 출력.
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
이 글을 보고 계실 선배님들께선 혹시나 잘못된 부분이 존재한다면 댓글로 알려주시면 감사하겠습니다. 😊
'기타 IT > Linux' 카테고리의 다른 글
Linux - 리눅스 ls, ll, pwd 명령어 사용법 (0) | 2023.04.11 |
---|---|
Linux - 리눅스 cd 명령어 사용법 [디렉토리 이동] (0) | 2023.04.04 |
Linux - 리눅스 tail 명령어 사용법 (0) | 2023.04.03 |