grep
파일을 한줄씩 읽어서 패턴을 찾고, 찾는 패턴이 있으면 그 행을 출력한다.
문법
grep [옵션들] <패턴> <파일들>
기본옵션
-c : 찾는 패턴의 행의 수를 리턴
-E : 확장 정규 표현식 문법을 활성화 (egrep를 사용하면 -E를 붙인 효과와 동일하다)
-f <파일> 지정된 파일에서 검색 패턴을 읽어, 하나 이상의 패턴을 한줄에 하나씩 담는 파일을 만든다. (결과를 파일로 저장할때 사용)
-i : 대소문자를 무시
-l : 패턴을 찾으면 파일의 경로와 파일 이름만 표시
-p : Perl 정규 표현식 엔진을 활성화
-R, -r : 하위 디렉토리들을 재귀적으로 검색
예시
#file2.txt 의 내용
#-----------------------------------------
안녕하세요.
그랩 테스트를 위한 텍스트 파일입니다.
hello~
1. this is grep test file
2. hello again
3. this is egrep test file
#-----------------------------------------
$ grep "안녕" file2.txt
안녕하세요
$ grep hello file2.txt
hello~
hello again
메타문자
- "." : 하나의 문자를 의미, 실제 마침표를 검색하려면 \. 로 해야 함
- "?" : 물음표 앞의 문자는 선택적임을 알림, 생략해도 되는 문자
- "*" : ?와 비슷하지만 *앞의 항목이 0회 이상 반복될 수 있음을 의미
- "+" : *와 비슷하지만 0회 이상이 아닌 1회 이상 반복될 수 있음을 의미한다, 즉 +문자 앞의 항목이 1개 이상있어야함.
$ grep 't..s' file2.txt
1. this is grep test file
3. this is egrep test file
$ egrep 't.?.s' file2.txt 또는 grep -E 't.?.s' file2.txt 또는 grep 't.\?.s' file2.txt
1. this is grep test file
3. this is egrep test file
$grep 't.*s' file2.txt
1. this is grep test file
3. this is egrep test file
그룹묶기
$egrep 'is (grep|egrep)' file2.txt
1. this is grep test file
3. this is egrep test file
정규식 문자 범위
예 | 의미 |
[abc] | 문자 a나, b, c 를 체크 |
[1-5] | 1에서 5까지의 숫자를 체크 |
[a-zA-Z] | a~z, A~Z까지의 영문 소문자 또는 대문자를 체크 |
[0-9+-*/] | 숫자 및 사칙연산 기호들을 체크 |
[0-9a-fA-F] | 16진수 숫자를 체크 |
[1-475] | (주의)1~4까지 숫자와 7,5만 체크 |
정규식 단축 표기 (grep 에서 사용 시 -P 옵션을 줘야 함)
예 | 의미 |
\s | 공백문자 |
\S | 공백문자 아님 |
\d | 숫자 |
\D | 숫자 아님 |
\w | 단어문자 |
\W | 단어문자 아님 |
\xnn | 문자의 16진 코드 (ex 0x5F) |
$ grep -P '\d' file2.txt
1. this is grep test file
2. hello again~
3. this is egrep test file
정규식의 대괄호 문자분류 (grep에서 사용시 이중대괄호로 사용해야 함 ex. [[:digit]])
문자분류 | 의미 |
[:alnum:] | 임의의 영문자와 숫자 |
[:alpha:] | 임의의 영문자 |
[:cntrl:] | 임의의 제어문자 |
[:digit:] | 임의의 숫자 |
[:graph:] | 임의의 표시 가능 문자 |
[:lower:] | 임의의 소문자 |
[:upper:] | 임의의 대문자 |
[:print:] | 임의의 인쇄 가능문자 |
[:punct:] | 임의의 문장부호 |
[:space:] | 임의의 공백 문자 |
[:xdigit:] | 임의의 16진수 |
$grep 'X[[:upper]][[:digit]]' list.txt (list.txt 파일에서 X로 시작하는 대소문자, 숫자를 모두 찾는다.)
역참조 (\1 : 첫번재 참조, \2 : 두번째 참조, ...)
abcd
<div>hello</div>
1234
<u>UUU</u>
<a>a href=</aa>
위의 내용을 가지고 있는 test.txt 파일이 존재 할 경우 아래 grep 옵션에 의해 완벽한 태그(앞뒤가 같고 뒤는 /로 시작하는...)만 모두 찾는다.
$ egrep '<([A-Za-z]*)>.*</\1>' test.txt
또는
$ grep -E '<([A-Za-z]*)>.*</\1>' test.txt
<div>hello</div>
<u>UUU</u>
수량한정자
T{5} : T가 정확히 5번 반복된 문자열을 찾는다.
T{3,6} : T가 3회에서 6회까지 반복된 문자열을 찾는다.
앵커와 단어경계
^[1-5] : 문자열의 첫 글자가 1~5까지의 숫자 중 하나이어야 한다는 뜻
[1-5]$ : 마지막 문자가 1~5까지의 숫자 중 하나여야 한다는 뜻
'개발 > linux' 카테고리의 다른 글
bash 기초 - 리눅스 로그 파일 및 시스템 정보 (0) | 2021.01.18 |
---|---|
bash 기초 - ssh를 이용한 원격 명령 실행 (0) | 2021.01.18 |
무료 접속 유닉스(리눅스) 시스템 (0) | 2021.01.18 |
bash기초 - cut, file, head (0) | 2021.01.18 |
bash 기초 Shell Script(쉘 스크립트) (0) | 2021.01.18 |
댓글