[Linux] 패턴찾기(정규식표현)
▶ 정규식표현(Regular expressions)
-문자열의 집합을 표현하는 패턴
-여러가지 연산자를 사용하여 표현
▶ 기본구조
기본표현식: 한 개 문자와 일치하는 표현식
-모든 알파벳 문자,숫자
-메타문자: 따옴표로 묶인 패턴 안에서 특수한 의미를 가짐
\?, \+, \{, \|, \( , \)
▶ 반복연산자
-표현식 뒤에서 반복 회수를 지정하는 연산자
.(점) :임의의 문자 한 개와 일치
'\?' :0번 혹은 1번,
* :0번 이상
'\+' :1번이상
ex)
.at :hat,cat,bat ...
'colou\?r' :color, colour (u문자가 0번 혹은 1번)
ab*c :ac, abc, abbc, abbc, ...
'ab\+c' :abc,abbc,abbbc, ...
'\{n\}' :n번
'\[n,\}' :n번이상
'\{,m\}' :m번이하
'\{n,m\}' :n이상, m이하
ex)
gerp c '\{3,\}' :ccc, cccc, ...
▶ 두 표현식의 결합
-연결(Connection)
-선택(Or), 선택연산자 '|'사용
[우선순위]
괄호 >> 반복연산자 >> 연결 >> 선택
ex)
'gray \| grey' :gray혹은 grey
'a \| b*' : empty, a, b, bb,ab,abb,...
'gr\(a\|e\)y' :gray혹은 grey
▶ 문자 클래스
-문자 클래스는 대괄호 '[ ]'로 표현
-대괄호 안에 나열된 문자 중 한 문자를 의미
-대괄호 안에 첫 문자가 '^' (not)이면 나열된 문자가 아닌문자를 의미
-대괄호 안에서 '-'는 연속문자범위
-대괄호 안에 미리 정의된 문자 클래스 사용가능
ex)
[hc]at :hat,cat
[^b]at :bat를 제외한 '.at'와 일치하는 문자
[b-d]at :bat,cat,dat
[.] :[a],[b],[c] ...
▶ 백슬래시(\)문자와 특수 표현식
'\b' :단어 경계에 나타나는 공백문자 ex) '\brat\b'는 분리된 'rat'와 일치
'\B' :단어 경계가 아닌 공백문자 ex) '\Brat\B'는 'crate'와 일치, 'furry rat'과 불일치
'\<' :단어 시작에 나타나는 공백 문자열
'\>' :단어 끝에 나타나는 공백 문자열
'\w' :알파벳과 숫자 문자와 일치
'\W' : '\w'와 반대 문자 와 일치
ex)
$ grep ‘\<[a-z]b\>’ file1 :단어의 시작이 a-z문자중하나이고 단어의 끝이 b인 문자검색
▶ 기준 메타문자
^ :줄의 시작과 일치하는 문자
$ :줄의 끝과 일치하는 문자
▶ 후방 참조와 부표현식
-부표현식: 괄호 "(...)"로 묶어 표현
-후방참조 :'\n'라는 식으로 표현, n은 1-9숫자
정규표현식 내에 표시한 부표현식은 순서대로 1,2,3, ... 번호를 부여함
'\n'은 n번째 부표현식을 의미
ex)
"\ (abc\) \1" ㅡ> abcabc
"\( a \) \(b \) \( c \) \3 \2 \1" ㅡ> abccba
▶ 미리 정의된 문자 클래스
[:alpha:] :알파벳문자
[:digit:] :숫자 (다른표현: \d)
[:alnum:] : [[:alpha:]]와 [[:digit:]]과 동일 (다른표현\w)
[:blank:] :공백문자(space,tab)
[:space:] :공간문자(tab,newline,v-tab) (다른표현\s)
[:cntrl:] :제어문자
[:graph:] :그림문자
[:lower:] :소문자
[:upper:] :대문자
[:print:] :출력가능문자 (alnum, punct,space)
[:xdigit:] :16진수 문자
[:punct:] :구둣점
ex)
grep -n "[[:digit:]]" \{3\} " file1 :파일1에서 연속된 숫자3개가 있는것을 찾음
grep -n "[[:digit:]]" \{3\}- [[:digit:]]\{4\}" file1 :파일1에서 연속된 숫자3-숫자4개가 있는것을 찾음