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
반응형