셸 기초 - 기본 정규 표현 식

15785 단어
정규 표현 식 (Regular Expression, 일반적으로 regex 또는 RE 라 고 약칭) 은 특정한 준칙 에 맞 는 텍스트 를 찾 을 수 있 는 표현 방식 이다.많은 프로 그래 밍 언어 에서 정규 표현 식 을 사용 하여 복잡 한 매 칭 을 실현 합 니 다.셸 에서 자주 사용 되 는 정규 표현 식 을 간단하게 소개 합 니 다.
정규 표현 식
정규 표현 식 은 문자열 을 조작 하 는 논리 적 공식 입 니 다. 즉, 미리 정 의 된 특정한 문자 와 이 특정한 문자 들 의 조합 으로 일정한 규칙 이 있 는 문자열 (Regular Expression) 을 구성 하고 이 규칙 이 있 는 문자열 을 사용 하여 문자열 에 대한 여과 논 리 를 표현 합 니 다.정규 표현 식 은 리 눅 스 와 많은 다른 프로 그래 밍 언어 에 광범 위 하 게 응용 되 고 어디 에 있 든 그 기본 원 리 는 같다.
근본적으로 볼 때 정규 표현 식 은 두 가지 기본 구성 부분 에 의 해 만들어 진 것 이다. 일반 문자 와 특수 문자 이다.일반 문 자 는 특별한 의미 가 없 는 문 자 를 말한다.특수 문 자 는 흔히 메타 문자 (metacharacter) 나 meta 문자 라 고 부 릅 니 다. 말 그대로 특별한 의미 가 있 는 문 자 를 말 합 니 다. 물론 어떤 경우 에 도 특수 문 자 는 일반 문자 로 볼 수 있 습 니 다.
POSIX 는 두 가지 스타일 의 정규 표현 식, 기본 정규 표현 식 (BRE) 과 확장 정규 표현 식 (ERE) 이 있 습 니 다.이 두 스타일 의 정규 표현 식 은 일부 문자 의 의미 에서 미세한 차이 가 있다.자주 사용 하 는 grep 명령 으로 grep 명령 은 기본적으로 BRE 를 지원 합 니 다. ERE 를 사용 하여 일치 하려 면 - E 옵션 을 사용 할 수 있 습 니 다. 다음 예 에 서 는 grep 명령 을 사용 하여 정규 표현 식 의 사용 을 보 여 줍 니 다.
 
2. 기본 정규 표현 식
2.1 상용 메타 문자 목록  
   문자   
   BRE/ERE  
속뜻
  .
BRE&ERE
임의의 단일 문자 일치 (문자열 끝 문자 제외 NUL)
  ^
BRE&ERE
줄 의 첫머리 와 일치 합 니 다.  ^abc, abc 로 시작 하 는 문자열 과 일치 합 니 다.
  $
BRE&ERE
줄 끝 일치  abc $, abc 로 끝 나 는 문자열 과 일치 합 니 다. 
  *
BRE&ERE
0 개 이상 의 단일 문자 와 일치 합 니 다. 선행 문 자 는 정규 표현 식 일 수 있 습 니 다.
  +
ERE
앞의 정규 표현 식 과 일치 하 는 1 개 이상 의 인 스 턴 스
  ?
ERE
앞의 정규 표현 식 과 일치 하 는 0 개 또는 1 개의 인 스 턴 스
  [...]
BRE&ERE
네모 난 괄호 표현 식 은 네모 난 괄호 안의 모든 문자 와 일치 하 며, 항상 - 문자 와 일치 하여 사용 하 며, 연속 적 인 범 위 를 표시 합 니 다. ^문 자 는 괄호 안의 첫 번 째 문자 로 괄호 안에 없 는 임의의 문자 와 일치 합 니 다.
  -
BRE&ERE
하이픈 은 괄호 식 에서 사용 되 며 연속 문자 의 범 위 를 표시 합 니 다. (범 위 는 locale 에 따라 다 르 기 때문에 이식 이 불가능 합 니 다)
  {n,m}
ERE
구간 표현 식 은 앞 에 있 는 문자 n 에서 m 회 를 나타 낸다.그 중에서 n 과 m 의 값 은 0 - RE 에 있어 야 합 니 다.DUM_MAX (포함) 사이 에 후자 의 최소 치 는 255 이다.
  {n}
ERE
이전 문자 n 회 일치
  \{n,m\}  
BRE
기능 은 {n, m} 과 같 습 니 다.
  \{n\} 
BRE
기능
  \
BRE&ERE
전의 부
  ()
ERE
괄호 로 묶 인 정규 표현 식 군 과 일치 합 니 다.
  \(\)
BRE
특수 한 '보존 공간' 에\(와)\간 모드 를 저장 하면 최대 9 개 까지 저장 할 수 있 으 며, 후속 전의 시퀀스 를 통 해 보존 공간 모드 와 일치 할 수 있 습 니 다.
  
BRE
와\( \)  결합 하여 사용 합 니 다.\\1 은 첫 번 째 키 모드 와 일치 합 니 다.\\2 는 두 번 째 모드 와 일치 합 니 다. 최대\9 까지 입 니 다. 
  |
ERE
| 기호 앞 이나 뒤에 있 는 정규 표현 식 과 일치 합 니 다.
다음 에 필 자 는 grep 명령 을 사용 하여/etc/passwd 파일 에 대해 일치 하 는 동작 을 찾 을 것 입 니 다.
1) 일반 문자 와 일치:
[tongye@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 
2) 점 문자 "."를 사용 하여 임의의 문자 와 일치 합 니 다.
[tongye@localhost ~]$ grep r..t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

 
3) 별표 문자 사용 하기 "*"  물음표 문자 '?' 는 0 개 이상 의 문자 와 일치 합 니 다.
[tongye@localhost ~]$ grep roo* /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

grep roo */etc/passwd 명령 은/etc/passwd 에서 ro 와 일치 합 니 다. 뒤쪽 에는 0 개 이상 의 o 를 연결 할 수 있 습 니 다. ERE 스타일 에 서 는? 기 호 를 사용 하여 * 호 와 같은 효 과 를 얻 을 수 있 습 니 다.
[tongye@localhost ~]$ grep -E roo? /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

  
4) 추가 문자 "+"를 사용 하여 1 개 이상 의 문자 와 일치 합 니 다.
[tongye@localhost ~]$ grep -E roo+ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[tongye@localhost ~]$ grep -E ro+ /etc/passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

+ 문 자 를 사용 하면 앞 에 있 는 1 개 이상 의 문자 와 일치 할 수 있 습 니 다. * 문자 와 약간의 차이 가 있 습 니 다. 또한 + 문 자 는 ERE 스타일 에서 사용 되 므 로 grep 명령 의 - E 옵션 을 사용 해 야 합 니 다.
 
5) 사용 ^ 줄 의 첫 번 째 일치, $줄 의 끝 일치:
[tongye@localhost ~]$ grep ^t /etc/passwd
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
tongye:x:1000:1000:tongye:/home/tongye:/bin/bash

[tongye@localhost ~]$ grep ^t.*h$ /etc/passwd
tongye:x:1000:1000:tongye:/home/tongye:/bin/bash

. * 결합 하면 0 개 이상 의 임의의 문자 와 일치 하 는 것 을 표시 합 니 다. ^ 와 $를 결합 하여 사용 하면 지정 한 시작 과 끝 문자열 과 일치 할 수 있 습 니 다.
 
6) 괄호 안에 있 는 모든 문자 와 일치 하 는 사각형 괄호 표현 식 을 사용 합 니 다.
[tongye@localhost ~]$ grep [Nn]et /etc/passwd
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

결합 - 문 자 를 사용 하면 한 범위 내의 모든 문 자 를 일치 시 킬 수 있 습 니 다. 예 를 들 어 [0 - 9] 는 0 - 9 의 임의의 숫자 와 일치 하고 [a - z] 는 소문 자 와 일치 하 며 [A - Z] 는 대문자 와 일치 합 니 다.
[tongye@localhost ~]$ grep [a-z]c /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

^ 문자 사용
[tongye@localhost ~]$ grep [^a-z]c /etc/passwd
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

소문 자가 아 닌 문자 와 일치 하 는 문자열 을 표시 합 니 다. ^ 괄호 안에 넣 으 면 반대 의 미 를 표시 하고 괄호 밖 에 두 면 일치 하 는 줄 의 첫머리 를 표시 합 니 다.
 
7) {n. m} 구간 표현 식 을 사용 하여 지정 한 횟수 와 일치 합 니 다:
이 표현 식 은 지정 한 횟수 와 일치 하 는 데 사용 할 수 있 습 니 다. {n, m} 은 앞 에 있 는 문자 n ~ m 번, {n,} 은 최소 n 번, {, m} 은 최대 m 번, {n} 은 n 번 이 정확하게 일치 하 는 것 을 표시 합 니 다. BRE 에 서 는\{n, m\} 형식 으로 같은 기능 을 수행 합 니 다. n 과 m 의 값 은 0 ~ RE DUP MAX (이 값 포함) 여야 합 니 다.사이, 후자 의 최소 치 는 255 이다.
[tongye@localhost ~]$ grep 0'\{3\}' /etc/passwd  
tongye:x:1000:1000:tongye:/home/tongye:/bin/bash

[tongye@localhost ~]$ grep -E 0{3} /etc/passwd
tongye:x:1000:1000:tongye:/home/tongye:/bin/bash

 
8) 사용\( \) 일치 하 는 문 자 를 저장 하고 저 장 된 일치 하 는 문자열 을 참조 합 니 다.
사용\( \) 괄호 에 있 는 문자열 을 먼저 일치 시 킨 다음 에 일치 하 는 문자열 을 정규 표현 식 해석 기 에서 미리 정 의 된 레지스터 라 는 변수 에 저장 합 니 다. 그 번 호 는 1 에서 9 까지 입 니 다. 즉, 최대 9 개의 문자열 을 저장 할 수 있 습 니 다. 저 장 된 문자열 을 추출 할 수 있 습 니 다. 그 중에서 n 은 1 에서 9 로 각각 9 개의 레지스터 값 에 대응 합 니 다.
[tongye@localhost ~]$ grep '\(operator\).*\1' /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin

이 표현 식 에 대해 재 미 있 는 용법 이 하나 더 있 습 니 다.
[tongye@localhost ~]$ grep '^\(.\).*\1$' /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin

위 와 같이 정규 표현 식 ^\(.\). *\1 $는 줄 의 첫 글자 와 줄 의 끝 문자 가 같은 문자열 과 일치 합 니 다.
 
2.2 POSIX 괄호 식
POSIX 표준 은 비 영어 환경 에 맞 춰 문자 집합 범 위 를 강화 합 니 다. (예 를 들 어 [a - z]) 는 비 영문 자모 문자 와 일치 합 니 다. POSIX 는 괄호 식 [...] 을 사용 하여 범위 값 을 표시 합 니 다. 괄호 식 에 서 는 글자 의 문 자 를 제외 하고 (a, b, c 등) 별도의 구성 부분 이 있 습 니 다.
1) 문자 집합: 키 워드 를 묶 은 POSIX 문자 집합, 키 워드 는 다양한 문자 집합 을 설명 합 니 다.
2) 정렬 기호: 정렬 기 호 는 여러 문자 배열 을 하나의 단위 로 간주 합 니 다 (예 를 들 어 locale 에서 ch 라 는 두 문 자 를 하나의 단위 로 간주 합 니 다). 이 기 호 는 [. 와.] 문 자 를 조합 하여 묶 고 시스템 에서 사용 하 는 특정한 locale 에 각각 정의 가 있 습 니 다.
3) 등가 문자 집합: 등가 문자 집합 은 등가 로 봐 야 할 문자 로 locale 에서 추출 한 이름 요소 로 구성 되 어 [= 과 =] 로 묶 여 있 습 니 다.
다음 표 는 POSIX 문자 집합 목록 입 니 다:
 
유별
일치 문자
[:alnum:]
숫자 문자
[:alpha:]
알파벳 문자
[:blank:]
스페이스 바 와 포 지 셔 닝 문자
[:cntrl:]
제어 문자
[:digit:]
숫자 문자
[:graph:]
공백 문자
[:lower:]
소문 자 문자
[:upper:]
대문자
[:space:]
공백 부호
[:print:]
표시 가능 한 문자
[:punct:]
문장 부호 문자
[:xdigit:]
16 진수
주의해 야 할 것 은 상기 문자 집합 도 괄호 표현 식 에 넣 어야 하기 때문에 [: alpha:] 와 유사 한 표현 식 이 나타 날 수 있 습 니 다.
예 를 들 어:
[tongye@localhost ~]$ grep [[:upper:]] /etc/passwd       
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

 이 정규 표현 식 은 모든 대문자 와 일치 합 니 다.
 
참고 자료:
《 리 눅 스 프로 그래 밍 제4 판 》
《 셸 스 크 립 트 학습 지침 서 》
< 유 닉 스/리 눅 스/OS X 의 셸 프로 그래 밍 4 판 > 
다음으로 전송:https://www.cnblogs.com/tongye/p/9727147.html

좋은 웹페이지 즐겨찾기