귀염둥이의 메모

[Linux / CentOS 7] grep 명령어 사용 본문

Infra & Devops/Linux

[Linux / CentOS 7] grep 명령어 사용

겸둥이xz 2021. 8. 21. 15:43
반응형

grep (Global Reuglar Expression Print)

- 텍스트 파일에서 원하는 문자열이 들어간 행을 찾아 출력하는 명령어

- 주로 log 파일에서 특정 날짜, 문자로 기록된 error 메시지를 찾는데 유용하게 사용

 

 

grep [option] [정규표현식(문자열)] [file(s)]

 

*입력으로 파일명이 오지 않으면 표준입력으로 부터 입력을 받음

 

 

주요 옵션

옵션 (대소문자 구분) 의미
-b 문자열이 포함된 행의 시작점 출력
-c 문자열이 들어있는 행의 개수 출력
-i 대소문자 구분하지 않음
-n 행의 번호와 내용을 같이 출력
-v 문자열이 포함되지 않은 행 출력
-l  (소문자 L) 문자열을 포함하는 파일의 이름 출력
-w 하나의 단어로 포함된 행 출력
-r 하위 디렉토리의 파일까지 모두 출력

 

정규 표현식 메타 문자

메타문자 기능 예시 결과
^ 행의 시작 지시자 '^hello' hello 로 시작하는 모든 행
$ 행의 끝 지시자 'hello$' hello 로 끝나는 모든 행
. 하나의 문자 대응 'h..o' h와 o 사이에 딱 두 글자가 있는 단어 포함 행
.* 0 이거나 그 이상의 문자 (=all) 'hel.*o' helo, helao, hello, helabco, heladsfsfo
* 앞 문자가 하나이거나 반복됨 'hel*o' helo, hello, helllo, hellllo, ... , helllllllllllllllllo 등
| 또는(or) 'ab|cd|ef' 셋 중 하나라도 포함되어 있는 행
[] 문자 리스트 중의 한 문자를 나타냄 'abc[123]' abc1, abc2, abc3 을 포함한 행
[0-9] 0, 1, 2, 3, ... 또는 9 '[0-9]' 0, 1, 2, 3, ... 또는 9 를 포함한 행
[^] 제외한 모든 문자 '[^1-3]' 1,2,3 으로 조합하지 않은 문자가 하나라도 있는 경우
\ 지정문자 의미를 무시한다 'hello\.\[abc\]' hello.[abc] 를 포함한 행 (. 이나 [] 패턴식 무시하고 문자 그대로)
\< 단어의 시작 지시자 '\<hello' hello로 시작하는 단어를 포함하는 행
\> 단어의 끝 지시자 'hello\> hello로 끝나는 단어를 포함하는 행
x\{m\} 문자 x를 m번 반복한다 'o\{5w\}' 문자 o가 5회 연속적으로 나오는 모든 행

 

 

예시

 

------------- 대상 파일 : /usr/share/dict/words -------------

 

대문자 CAT 만 있는 라인을 검색

# grep "^CAT$" /usr/share/dict/words


대문자 CAT 가 단어로 있는 라인을 검색

# grep -w 'CAT' /usr/share/dict/words


대문자 C로 시작해서 T 로 끝나는 라인을 검색

# grep '^C.*T$' /usr/share/dict/words

 

 

대문자 C와 T 사이에 3글자가 더 있는 라인을 검색

# grep 'C...T' /usr/share/dict/words
또는
# grep 'C.\{3\}T' /usr/share/dict/words

 

대소문자 구분 없이 cat 가 단어로 있는 라인을 검색

# grep -iw 'CAT' /usr/share/dict/words

 

 

대문자 CAT 가 없는 라인을 검색

# grep -v 'CAT' /usr/share/dict/words





------------- 대상파일 : /etc/ssh/sshd_config -------------

 

 
공백문자가 있는 라인을 검색

# grep ' ' /etc/ssh/sshd_config

 

 

$기호가 있는 라인을 검색

# grep '\$' /etc/ssh/sshd_config


라인에 아무런 문자가 없는 라인을 제외하고 검색

# grep -v '^$' /etc/ssh/sshd_config


# 문자로 시작하는 라인을 제외하고 검색

# grep -v '^#' /etc/ssh/sshd_config

 

 

대문자만 있는 라인을 검색

# grep '^[[:upper:]][[:upper:]]*$' /usr/share/dict/words

 

반응형
Comments