[Linux]

[Linux] 패턴찾기(정규식표현)

Jarvis2304 2022. 9. 2. 08:59

 

 

▶ 정규식표현(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개가 있는것을 찾음