Linux/Shell Script

[Shell Script] Pattern Matching

비번변경 2022. 7. 16. 00:21

Pattern Matching

*, ?, [ ]와 같은 glob 문자를 이용한 패턴 매칭은 파일명 매칭, case 문, 매개변수 확장 등과 같이 쉘 스크립트 전반에서 사용할 수 있다.

 

 

Glob 문자

문자 의미
* empty를 포함해 모든 문자와 매칭된다.
? 임의의 문자 하나와 매칭된다.
[…] Bracket 표현식 내 하나의 문자와 매칭된다.

 

 

Bracket 표현식

표현식 의미
[XYZ] X or Y or Z 문자에 대해 매칭된다.
[X-Z] X부터 Z까지의 문자를 -로 표현할 수 있다.
[[:class:]] POSIX character class와 매칭된다.
[^…] ^문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 매칭된다.
[!…] ! 문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 매칭된다.

 

Character Classes

문자를 비슷한 의미를 가진 그룹으로 나누어 놓은 것.

예로 들어, [[:alnum:]]은 bracket 표현식 내에서 [:alnum:] 클래스가 사용되어 [A-Za-z0-9]의 의미를 가진다.

Class Represented Description
[[:alnum:]] [A-Za-z0-9] 영문자, 숫자
[[:alpha:]] [A-Za-z] 영문자
[[:lower:]] [a-z] 영어 소문자
[[:upper:]] [A-Z] 영어 대문자
[[:digit:]] [0-9] 숫자
[[:xdigit:]] [0-9a-fA-F] 16진수 자릿수
[[:space:]] [ \t\n\v\f\r] 모든 공백 문자
[[:blank:]] [ \t] Space, tab only
[[:punct:]] [!@#$%^&*(){}[]...] 키보드에 있는 숫자, 대,소문자 빼고 모든 문자
[[:graph:]] [!-~] Printable and visible characters
(ASCII 테이블에서 ! 부터 ~ 까지)
[[:print:]] [ -~] Printable (non-Control) characters
(ASCII 테이블에서 space 부터 ~ 까지)
[[:cntrl:]] [\x00-\x19\x7F] Control characters

 

 

Extended Pattern

bash에서만 제공되는 기능으로 프롬프트 또는 shell 함수에서 사용할 수 있으나, shell 스크립트 파일을 실행할 때는 비활성화된다. 단, shopt -s extglob 옵션을 이용해 활성화할 수 있다.

 

표현식 의미
?(<PATTERN-LIST>) 주어진 패턴이 zero or one 발생하면 매칭됩니다.
*(<PATTERN-LIST>) 주어진 패턴이 zero or more 발생하면 매칭됩니다.
+(<PATTERN-LIST>) 주어진 패턴이 one or more 발생하면 매칭됩니다.
@(<PATTERN-LIST>) 주어진 패턴이 one 발생하면 매칭됩니다.
!(<PATTERN-LIST>) ! 문자는 Not 의 의미로 주어진 패턴과 맞지 안으면 매칭됩니다.

 

 

 

참고 문서

https://mug896.github.io/bash-shell/pattern_matching.html