반응형
grep 명령어는 입력으로 전달된 파일의 내용에서 특정 문자열을
찾고자할 때 사용하는 명령어입니다.
grep --help
사용법: grep [<옵션>]... <패턴> [<파일>]...
각 <파일>에서 <패턴>에 일치하는 행을 검색합니다.
예제: grep -i 'hello world' menu.h main.c
<패턴>에는 개행 문자로 구분한 여러 패턴을 넣을 수 있습니다.
패턴 선택 및 해석:
-E, --extended-regexp <패턴>은 확장 정규 표현식입니다
-F, --fixed-strings <패턴>은 단순 문자열입니다
-G, --basic-regexp <패턴>은 기본 정규 표현식입니다
-P, --perl-regexp <패턴>은 펄 정규 표현식입니다
-e, --regexp=<패턴> 일치하는 부분을 찾을 <패턴> 기준을 활용합니다
-f, --file=<파일> <파일>에서 <패턴>에 일치하는 부분을 취합니다
-i, --ignore-case 대소문자 구분을 무시합니다
--no-ignore-case 대소문자 구분을 유지합니다(기본값)
-w, --word-regexp 주어진 단어와 완벽하게 일치하는 부분만
-x, --line-regexp 주어진 행 내용과 완벽하게 일치하는 부분만
-z, --null-data 데이터 행의 끝은 개행 문자가 아닌 0바이트 값으로 끝납니다
기타:
-s, --no-messages 오류 메시지 출력을 생략합니다
-v, --invert-match 조건에 일치하지 않는 행을 선택합니다
-V, --version 버전 정보를 나타내고 빠져 나갑니다
--help 이 도움말 텍스트를 나타내고 빠져 나갑니다
출력 제어:
-m, --max-count=<횟수> <횟수> 만큼 행을 찾아내고 나면 멈춤
-b, --byte-offset 출력 행의 바이트 오프셋을 출력합니다
-n, --line-number 출력 행의 행 번호를 출력합니다
--line-buffered 모든 행의 출력을 플러싱합니다
-H, --with-filename 출력 행에 파일 이름을 출력합니다
-h, --no-filename 출력 행 앞부분의 파일 이름 표시를 생략합니다
--label=<레이블> <레이블>을 표준 입력 앞부분의 파일 이름으로 사용합니다
-o, --only-matching 조건에 일치하는 행이 비어있지 않은 결과만 나타냅니다
-q, --quiet, --silent 모든 일반 출력 동작을 생략합니다
--binary-files=<형식> 바이너리 파일을 지정한 <형식>으로 간주합니다
<형식> 값은 'binary', 'text', 'without-match' 중 하나입니다
-a, --text --binary-files=text 옵션과 동일
-I --binary-files=without-match 옵션과 동일
-d, --directories=<동작> 디렉터리 처리 방식
<동작> 값은 'read', 'recurse', 'skip' 중 하나입니다
-D, --devices=<동작> 장치, FIFO, 소켓 처리 방식
<동작> 값은 'read', 'skip' 중 하나입니다
-r, --recursive --directories=recurse와 유사
-R, --dereference-recursive 위 옵션과 비슷하지만 모든 심볼릭 링크를 따라갑니다
--include=<글롭> <글롭>(파일 패턴)에 일치하는 파일만 검색합니다
--exclude=<글롭> <글롭>에 일치하는 파일을 건너뜁니다
--exclude-from=<파일> <파일>과 파일 패턴이 일치하는 파일을 건너뜁니다
--exclude-dir=<글롭> <글롭>과 일치하는 디렉터리를 건너뜁니다
-L, --files-without-match 일치하는 행이 없으면 <파일>의 이름만 출력합니다
-l, --files-with-matches 일치하는 행이 있는 <파일>의 이름만 출력합니다
-c, --count <파일>에 일치하는 행 갯수만 출력합니다
-T, --initial-tab (필요한 경우) 행 별로 탭을 표시합니다
-Z, --null <파일> 이름 뒤에 0 바이트 값을 출력합니다
문맥 제어:
-B, --before-context=<갯수> <갯수> 줄 수만큼 출력 내용의 앞부분을 출력합니다
-A, --after-context=<갯수> <갯수> 줄 수만큼 출력 내용의 뒷부분을 출력합니다
-C, --context=<갯수> <갯수> 줄 수 만큼 출력 내용 앞 뒤 부분을 모두 출력합니다
-NUM --context=<갯수>와 동일
--group-separator=<구분자> 문맥상 일치하는 행을 <구분자> 출력으로 구분
--no-group-separator 일치 문맥에 대한 구분자를 출력하지 않습니다
--color[=<시기>],
--colour[=<시기>] 일치하는 문자열 강조시 마커를 활용합니다
<시기>의 값은 'always', 'never', 'auto' 중 하나입니다
-U, --binary 개행 문자에서 CR 문자를 빼내지 않음(MSDOS/윈도우)
<파일> 값이 '-' 이면, 표준 입력을 읽습니다. <파일>에 아무런 값이 없다면,
재귀 탐색 옵션을 주었을 경우 현재 디렉터리를, 그렇지 않으면 '-' 값을 설정함
으로 가정합니다. <파일> 갯수가 한개일 경우 -h 옵션을 준 것으로 가정합니다.
조건 일치 행이 나오면, 끝내기 상태 값은 0을, 그렇지 않으면 1을 반환합니다.
오류가 나타났거나 -q 옵션을 주지 않았다면, 2를 반환합니다.
버그 보고 주소: bug-grep@gnu.org
GNU grep 홈 페이지: <https://www.gnu.org/software/grep/>
GNU 소프트웨어 활용 일반 도움말: <https://www.gnu.org/gethelp/>
자주 사용하는 옵션
-r 옵션 : 현재 디렉토리 아래의 모든파일/폴더에서 특정 검색어 찾기
#현재 디렉토리 아래의 모든파일/폴더에서 june1562 찾기
grep -r "june1562"
june1562:june1562
#특정 디렉토리 안의 모든 파일에서 june1562 찾기
grep -r "june1562" /home/june/test
/home/june/test/june1562:june1562
#현재 폴더에서 모든 .md파일에서 NCP 찾기
grep -r "NCP" --include="*.md" ./
./공부/명령어/grep 명령어 사용법.md:NCP
#현재 폴더에서 .h 파일 제외하고 NCP 찾기
grep -r "NCP" --exclude=".h" ./
./.obsidian/plugins/make-md/data.json: "//공부/공부/NCP",
./.obsidian/plugins/make-md/data.json: "//공부/공부/NCP/공부/NCP/메뉴얼/공부/NCP/
",
./.obsidian/workspace.json: "공부/NCP/메뉴얼/계정 자원 삭제/네이버 계정 자원 삭제.md",
./.obsidian/workspace.json: "공부/NCP/메뉴얼/Security Monitoring 신청 방법.md",
./.obsidian/workspace.json: "공부/NCP/메뉴얼/계정 자원 삭제",
./.obsidian/workspace.json: "공부/NCP/메뉴얼",
./.obsidian/workspace.json: "공부/NCP",
#access로그에서 OPTIONS라는 글자 제외하고 찾기
cat access_log | grep -v "OPTIONS"
192.168.19.31 - - [08/Jan/2025:15:22:20 +0900] "GET / HTTP/1.1" 403 202 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.19.31 - - [08/Jan/2025:15:22:20 +0900] "GET /favicon.ico HTTP/1.1" 403 213 "http://ssenumma.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" -
192.168.19.31 - - [08/Jan/2025:15:22:20 +0900] "GET / HTTP/1.1" 403 202 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.19.31 - - [08/Jan/2025:15:22:20 +0900] "GET /favicon.ico HTTP/1.1" 403 213 "http://ssenumma.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" -
#access로그에서 OPTIONS,403 글자 제외하고 찾기 (-E옵션 대신 egrep명령어 사용해도 동작)
cat access_log | grep -v -E "OPTIONS|403"
192.168.19.31 - - [08/Jan/2025:15:21:57 +0900] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.19.31 - - [08/Jan/2025:15:23:37 +0900] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.19.31 - - [08/Jan/2025:15:23:38 +0900] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.19.31 - - [08/Jan/2025:15:23:38 +0900] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0"
#access로그에서 get 찾는데 대소문자 구분안하고 찾기
cat access_log | grep "get"
cat access_log | grep -i "get" # -i옵션이 들어가야함
192.168.19.31 - - [16/Dec/2024:09:59:02 +0900] "GET / HTTP/1.1" 200 44
192.168.19.31 - - [16/Dec/2024:09:59:02 +0900] "GET /favicon.ico HTTP/1.1" 404 209
192.168.19.31 - - [16/Dec/2024:16:36:49 +0900] "GET / HTTP/1.1" 403 202
192.168.19.31 - - [16/Dec/2024:16:36:50 +0900] "GET / HTTP/1.1" 403 202
#access로그에서 get 대소문자 없이 몇번째 줄인지 표시 후 찾기
cat access_log | grep -ni "get" #-n line number
1:192.168.19.31 - - [16/Dec/2024:09:59:02 +0900] "GET / HTTP/1.1" 200 44
2:192.168.19.31 - - [16/Dec/2024:09:59:02 +0900] "GET /favicon.ico HTTP/1.1" 404 209
14:192.168.19.31 - - [16/Dec/2024:16:36:49 +0900] "GET / HTTP/1.1" 403 202
15:192.168.19.31 - - [16/Dec/2024:16:36:50 +0900] "GET / HTTP/1.1" 403 202
16:192.168.19.31 - - [16/Dec/2024:16:36:50 +0900] "GET / HTTP/1.1" 403 202
반응형
'리눅스 > Tip' 카테고리의 다른 글
아파치 mod_qos 적용(apache mod_qos) (0) | 2025.01.15 |
---|---|
리눅스 팁(단축키 , 명령어 모음) (2) | 2023.01.03 |