Regular expressions and wildcards¶
GNU/Linux 운영 체제에서, 정규 표현식과 와일드카드는 종종 같은 기호(또는 스타일)을 사용하기 때문에 사람들은 이들을 혼동하기 쉽습니다.
정규 표현식과 와일드카드의 차이점은 무엇일까요?
유사점:
- 같은 기호를 가지고 있지만, 완전히 다른 의미를 나타냅니다.
차이점:
- 정규 표현에는 파일 콘텐츠와 일치하는 파일 또는 디렉토리 이름을 일치하도록 사용됩니다.
- 정규 표현식은
grep,sed,awk등의 명령어에서 사용될 수 있습니다; 와일드카드는cp,find,mv,touch,ls등의 명령어에서 사용됩니다. - 와일드카드는 일반적으로 'cp', 'find', 'mv', 'touch', 'ls' 등과 같은 명령어와 함께 사용됩니다.
GNU/Linux에서의 와일드카드¶
GNU/Linux OS는 다음과 같은 와일드카드를 지원합니다:
| 와일드카드 스타일 | 역할 |
|---|---|
| ? | 파일 또는 다이렉토리 이름의 한 문자와 일치합니다. |
| - | 파일 또는 디렉토리 이름의 0개 이상의 임의 문자와 일치합니다. |
| [ ] | 괄호 안의 어떤 단일 문자와도 일치합니다. 예를 들어, [one]은 o 또는 n 또는 e와 일치한다는 의미입니다. |
| [-] | 괄호 안에 주어진 범위의 어떤 단일 문자와도 일치합니다. 예를 들어, [0-9]는 0에서 9까지의 어떤 단일 숫자와 일치합니다. |
| [^] | "논리적 비"로 단일 문자와 일치합니다. 예를 들어,[^a-zA-Z] 는 단일 비문자 문자와 일치합니다. |
| {,} | 여러 개의 단일 문자가 연속적으로 일치하지 않습니다. 쉼표로 구분합니다. |
| {..} | [-] 와 동일합니다. 예를 들어 {0..9} 및 {a..z} |
다른 명령어들은 와일드카드 스타일을 다르게 지원합니다:
find: *, ?, [ ], [-], [^] 지원ls: 모두 지원mkdir: {,} 및 {..}touch: {,} 및 {..}mv: 모두 지원cp: 모두 지원
For example:
Shell > mkdir -p /root/dir{1..3}
Shell > cd /root/dir1/
Shell > touch file{1,5,9}
Shell > cd
Shell > mv /root/dir1/file[1-9] /root/dir2/
Shell > cp /root/dir2/file{1..9} /root/dir3/
Shell > find / -iname "dir[1-9]" -a -type d
GNU/Linux에서의 정규 표현식¶
역사적 발전으로 인해 정규 표현식에는 두 가지 주요 학파가 존재합니다:
- POSIX:
- BRE(기본 정규 표현식)
- ERE(확장 정규 표현식)
- POSIX 문자 클래스
- PCRE (Perl 호환 정규 표현식): 다양한 프로그래밍 언어에서 가장 일반적입니다.
| BRE | ERE | POSIX 문자 클래스 | PCRE | |
|---|---|---|---|---|
| 'grep' | √ | √ (-E 옵션 필요) |
√ | √ (-P 옵션 필요) |
| 'sed' | √ | √ (-r 옵션 필요) |
√ | × |
| 'awk' | √ | √ | √ | × |
정규 표현식에 대한 더 많은 정보를 원한다면, 이 웹사이트를 방문하여 유용한 정보를 더 알아보세요.
BRE¶
BRE (기본 정규 표현식)은 UNIX 시스템의 grep 명령어와 ed 텍스트 편집기에 의해 도입된 가장 오래된 유형의 정규 표현식입니다.
| 메타문자 | description | bash 예제 |
|---|---|---|
| - | 이전 문자의 발생 횟수와 일치하며, 이는 0 또는 어떤 횟수든 가능합니다. | |
| . | 줄 바꿈을 제외한 어떤 단일 문자와 일치합니다. | |
| ^ | 줄의 시작 부분과 일치합니다. 예를 들어 - ^h는 h로 시작하는 줄과 일치합니다. | |
| $ | 줄의 끝 부분과 일치합니다. 예를 들어 - **h$**는 h로 끝나는 줄과 일치합니다. | |
| [] | 괄호 안에서 지정된 어떤 단일 문자와 일치합니다. 예를 들어 - **[who]**는 w, h, o 중 하나와 일치합니다; **[0-9]**는 한 자리 숫자와 일치하며 **[0-9][a-z]**는 한 자리 숫자와 소문자 글자로 구성된 문자와 일치합니다. | |
| [^] | 괄호 안에서 지정된 문자를 제외한 어떤 단일 문자와 일치합니다. 예를 들어, **[^0-9]**는 숫자가 아닌 모든 문자와 일치합니다. **[^a-z]**는 소문자가 아닌 모든 단일 문자와 일치합니다. | |
| \ | 일부 특수 기호가 나타내는 의미를 취소하기 위해 사용되는 이스케이프 문자입니다. | echo -e "1.2\n122" \\| grep -E '1\.2'1.2 |
| \{n\} | 이전 단일 문자의 발생 횟수와 일치하며 n은 일치 횟수를 나타냅니다. | echo -e "1994\n2000\n2222" \\| grep "[24]\{4\}"2222 |
| \{n,\} | 이전 단일 문자를 적어도 n번 일치시킵니다. | echo -e "1994\n2000\n2222" \\| grep "[29]\{2,\}"1994 2222 |
| \{n,m\} | 이전 단일 문자를 최소 n번 이상 최대 m번까지 일치시킵니다. | echo -e "abcd\n20\n300\n4444" \\| grep "[0-9]\{2,4\}"20 300 4444 |
ERE¶
| 메타문자 | description | bash 예제 |
|---|---|---|
| + | 이전 단일 문자의 발생 횟수와 일치하며 1회 이상이 될 수 있습니다. | echo -e "abcd\nab\nabb\ncdd" \\| grep -E "ab+"abcd ab abb |
| ? | 이전 단일 문자의 발생 횟수와 일치하며 0 또는 1회가 될 수 있습니다. | echo -e "ac\nabc\nadd" \\| grep -E 'a?c'ac abc |
| \< | 문자열의 시작 부분과 일치하는 경계 문자입니다. | echo -e "1\n12\n123\n1234" \\| grep -E "\<123"123 1234 |
| \> | 문자열의 끝 부분과 일치하는 경계 문자입니다. | echo -e "export\nimport\nout" \\| grep -E "port\>"export import |
| () | 조합적 일치, 즉 괄호 안의 문자열을 조합으로 취하고 일치시킵니다. | echo -e "123abc\nabc123\na1b2c3" \\| grep -E "([a-z][0-9])+"abc123 a1b2c3 |
| \ | 파이프라인 기호는 "또는"의 의미를 나타냅니다. |
ERE는 특수 의미를 가진 문자도 지원합니다:
| 특수 문자 | description |
|---|---|
| \w | [a-zA-Z0-9] 와 동일 |
| \W | [^a-zA-Z0-9] 와 동일 |
| \d | [0-9] 와 동일 |
| \D | **[^0-9]**와 동일 |
| \b | \< 또는 **\>**와 동일 |
| \B | 경계 문자가 아닌 문자와 일치합니다. |
| \s | 모든 공백 문자와 일치합니다. **[ \f\n\r\t\v]**와 동일 |
| \S | **[^ \f\n\r\t\v]**와 동일 |
| 공백 문자 | description |
|---|---|
| \f | 개행 문자와 일치합니다. \x0c 및 \cL와 동일 |
| \n | 개행 문자와 일치합니다. \x0a 및 \cJ와 동일 |
| \r | 단일 캐리지 리턴을 일치시킵니다. \x0d 및 \cM와 동일 |
| \t | 단일 탭을 일치시킵니다. \x09 및 \cI와 동일 |
| \v | 수직 탭 문자와 일치합니다. \x0b 및 \cK와 동일 |
POSIX 문자 클래스¶
가끔 "POSIX 문자 클래스"(또는 "POSIX 문자")를 볼 수 있습니다. 그러나 저자 자신은 "POSIX 문자 클래스"를 거의 사용하지 않으므로 이 섹션은 기본적인 이해를 위한 것입니다.
| POSIX 문자 클래스 | 해당하는 것 |
|---|---|
| [:alnum:] | [a-zA-Z0-9] |
| [:alpha:] | [a-zA-Z] |
| [:lower:] | [a-z] |
| [:upper:] | [A-Z] |
| [:digit:] | [0-9] |
| [:space:] | [\f\n\r\t\v] |
| [:graph:] | [^ \f\n\r\t\v] |
| [:blank:] | [ \t] |
| [:cntrl:] | [\x00-\x7F\x7F] |
| [:print:] | [\x20-\x7E] |
| [:punct:] | [][!"#$%&'()*+,./:;<=>?@^_`{\ |
| [:xdigit:] | [A-Fa-f0-9] |
정규 표현식 소개¶
온라인에서 정규 표현식 스킬을 연습할 수 있는 많은 웹사이트가 있습니다.
Author: tianci li