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