3. Linux OS 이용/관리
3.3. 명령어
3.3.3. 와일드카드/정규표현식
3.3.3.1. 와일드카드.
- wildcard. 명령어라기 보다는 명령어에 부수적으로 사용되는 대체 문자(열)이다.
- 패턴매칭을 위한 특수 문자로, 동일한 표식을 사용하는 파일/디렉토리/내용을 색출하고자 할 때 사용한다. 주로 파일/디렉토리를 솎아내기에 좋다.
- 동일한 표식이라도 결합되는 명령어에 따라 와일드카드가 되기도 하고 정규표현식이 되기도 하기에 주의해야 한다.
- 정규표현식에 대비 상대적으로 단순하고 직관적인 대신, 제한적이다. 와일드카드를 쉽게 비유하자면 "한 번에 끝까지"라고 할 수 있다.
- ls, cp, mv, rm, find, tar, echo은 와일드카드를 채택한다.
3.3.3.1.1. *
- 0개 이상의 임의의 문자를 대체한다.
- 정규표현식과 구별되고, 추출내용도 꽤나 다르기에 주의해야 한다. (와일드카드 *는 정규표현식의 .*과 비슷한 면도 있으나 분명히 다른 결과를 추출한다.)
| 형태 | 내용 | 예시 |
| *.txt | .txt로 끝나는 | test.txt 등 |
| abc* | abc로 시작하는 | abc, abcxy, abcmde.exe 등 |
| *cde | cde로 끝나는 | cde, xycde 등 |
| *abc* | abc를 포함하는 | abc, xyabc, abcxy, xyabc.ssh 등 |
| abc*def | abc로 시작하고 def로 끝나는 | abcxydef 등 |
| *abc*def* | abc로 시작하고 def*로 끝나는 절을 포함하는 | 생략 |
| abc\** | abc*로 시작하는 | abc*, abc*x, abc*y 등 |

3.3.3.1.2. ?
- 해당 위치의 1개의 임의의 문자를 대체한다.
- ?(ASCII 63)가 목적이라면 이스케이프 문자를 활용해 \?라 써야 한다.
| 형태 | 내용 | 예시 |
| abc? | abc뒤에 하나의 문자를 포함하는 (abc로 시작하는 네 문자) |
abcx, abcy 등 |
| ?abc | abc 앞에 하나의 문자를 포함하는 (abc로 끝나는 네 문자) |
xabc, yabc 등 |
| a?bc | a와 bc 사이에 하나의 문자를 포함하는 (a로 시작해 bc로 끝나는 네 문자) |
axbc, aybc 등 |
| abc\?? | abc? 뒤에 하나의 문자를 포함하는 (abc?로 시작하는 다섯 문자) |
abc?x, abc?y 등 |

3.3.3.1.3. []
- Character Class. 문자클래스로, 대괄호 안의 지정 문자들의 집합에 속한 하나와 일치하는 문자를 대체한다.
- 안에 포함된 ,은 ASCII44로서 인식된다. {}에서는 구분자로 인식된다.
- 문자클래스 안에서 ^로 시작하면 부정클래스로, 대괄호 안의 지정 문자들의 집합에 속하지 않은 하나와 일치하는 문자를 대체한다.
| 형태 | 내용 | 예시 |
| file[a2bCd].txt | file과 .txt사이에 a,2,b,C,d중 하나를 포함하는 | filea.txt, file2.txt, fileb.txt, fileC.txt, filed.txt |
| file[a-z].txt | file과 .txt사이에 a부터 z중 하나를 포함하는 | filea.txt, fileb.txt ... filey.txt, filez.txt |
| file[a-z0-9].txt | file과 .txt 사이에 a부터z, 0부터9중 하나를 포함하는 | filea.txt, fileb.txt ... filey.txt, filez.txt, file0.txt, file1.txt ... file8.txt, file9.txt |
| [^abc].txt | a,b,c가 아닌 1문자로 시작해서 .txt로 끝나는 | d.txt, e.txt, ... y.txt, z.txt, 0.txt, ... 9.txt 등 |
| [ab][cd].txt | 처음은 a또는b, 두번쨰는 c또는d이고 .txt로 끝나는 | ac.txt, ad.txt, bc.txt, bd.txt |
| file[a,b].txt | file과 .txt 사이에 a,",",b중 하나를 포함하는 | filea.txt, file,.txt, fileb.txt |
| [abc]???.* | a,b,c중 하나와 임의의 세 문자와 "."로 시작하는 | axyz.txt, bxyz.txt, cxyz.txt, adef.exe, btdx.ssh 등 |
| file\[a\].txt | 이스케이프 | file[a].txt |

3.3.3.1.4. {}
- Brace Expansion. 중괄호 안에서 쉼표로 구분된 여러 문자열들을 한 번에 대체한다.(중괄호 확장)
- 안에 포함된 ,은 구분자를 의미하며, ASCII 44의 ,를 원하면 \,로 써야 한다.
| 형태 | 내용 | 예시 |
| {a,b,c}.txt | (a로시작하고 .txt로 끝나는) and (b로 시작하고 .txt로 끝나는) and (c로 시작하고 .txt로 끝나는) | a.txt, b.txt, c.txt |
| {a..c}.txt | (a로 시작하고 .txt로 끝나는) and (b로 시작하고 .txt로 끝나는) and (c로 시작하고 .txt로 끝나는) | a.txt, b.txt, c.txt |
| {a..c,0..2}.txt | (a로 시작하고 .txt로 끝나는) and (b로 시작하고 .txt로 끝나는) and (c로 시작하고 .txt로 끝나는) and (0으로 시작하고 .txt로 끝나는) and (1로 시작하고 .txt로 끝나는) and (2로 시작하고 .txt로 끝나는) | a.txt, b.txt, c.txt, 0.txt, 1.txt, 2.txt |
| {abc,cde}.txt | (abc로 시작하고 .txt로 끝나는) and (cde로 시작하고 .txt로 끝나는) | abc.txt, cde.txt |
| {a..c,\,}.txt | (a로 시작하고 .txt로 끝나는) and (b로 시작하고 .txt로 끝나는) and (c로 시작하고 .txt로 끝나는) and (,로 시작하고 .txt로 끝나는) | a.txt, b.txt, c.txt, ,.txt |
| \{a,b\}.txt | 이스케이프 | {a,b}.txt |

3.3.3.2. 정규표현식
- regular expression. 명령어라기 보다는 명령어에 부수적으로 사용되는 대체 문자(열)이다.
- 패턴매칭을 위한 특수 문자로, 동일한 표식을 사용하는 파일/디렉토리/내용을 색출할 수 있다. 주로 파일 내용을 솎아내기에 좋다.
- 동일한 표식이라도 결합되는 명령어에 따라 와일드카드가 되기도 하고 정규표현식이 되기도 하기에 주의해야 한다.
- 와일드카드 대비 상대적으로 정교한 대신, 기술적인 분석이 필요하다. POSIX 표준 문법에 따른다.
- grep, find -regex은 정규표현식을 채택한다.
3.3.3.2.1. *
- 바로 앞의 문자와 동일한 문자 0개 이상으로 대체한다.
- .은 모든 문자를 대체할 수 있으며, .(ASCII 46)을 찾으려면 이스케이프문자를 활용해 \.라 써야 한다. 놓치기 쉬우니 조심해야 한다.
- 끝나거나 시작하기 위해서는 시작/끝 지시자와 함께 해야 한다.
- 와일드카드와의 구별되고, 추출내용도 꽤 다르기에 주의해야 한다.
| 예시 | 내용 | 예시 |
| *.txt | * 앞에 문자가 없어 에러 | |
| .*.txt | 1개 이상의 임의의 문자열 뒤에 txt로 이어지는 것을 포함하는 (txt로 끝나는 것과는 다름) |
xtxt, xytxt, xyztxt, (xtxtx, xytxtx, xyztxtxy 등) |
| .*\.txt | 0개 이상의 임의의 문자열 뒤에 .txt로 이어지는 것을 포함하는 (.txt로 끝나는 것과는 다름) |
.txt, x.txt, xy.txt 등 (.txtx, x.txtxy, xy.txtx, xy.txtxyz 등) |
| .*\.txt$ | 0개 이상의 임의의 문자열 뒤에 .txt로 이어지고 끝나는 | |
| .*cde | 0개 이상의 임의의 문자열 뒤에 cde로 이어지는 것을 포함하는 (cde로 끝나는 것과는 다름) |
cde, xcde, xycde 등 (cdex, xcdexy, xycdex 등) |
| abc* | ab뒤에 0개 이상의 c를 포함하는 (ab로 시작하는 것과는 다름) |
ab, abc, abcc 등 (xab, xabc, xyzabccc 등) |
| abc.* | ab 뒤에 0개 이상의 임의의 문자열로 이어지는 것을 포함하는 (abc로 시작하는 것과는 다름) |
abc, abcx, abcxy 등 (xabc, yabcx, xyzabcezy 등) |
| .*abc.* | abc 앞뒤로 0개 이상의 임의의 문자열로 이어지는 것을 포함하는 (abc를 포함하는) |
abc, xyabc, abcxy, xyabcxy 등 |
| abc*def | ab 뒤에 0개 이상의 c를 포함하고 def로 이어지는 것을 포함하는 (ab로 시작해 def로 끝나는 것과는 다름) |
abdef, abcdef, abccdef 등 (xabdef, xabcdefy, xyabccdefz 등) |
| abc.*def | abc와 def 사이에 0개 이상의 문자를 두는 것을 포함하는 (abc로 시작해 def로 끝나는 것과는 다름) |
abcdef, abcxdef, abcxydef 등 (xabcdef, xabcxdefz, xyabcxydefzy 등) |

3.3.3.2.2. +
- 바로 앞의 문자와 동일한 문자 1개 이상으로 대체한다.
| 형태 | 내용 | 예시 |
| a+ | a가 1개 이상 있는 | a, aa, aaa 등 |
| a+b | a가 1개 이상 있고 b가 있는 | ab, aab, aaab 등 |
| (abc)+d | abc가 1개 이상 있고 d가 있는 | abcd, abcabcd, abcabcabcd 등 |
| [abc]+d | a,b,c중 하나가 1개 이상 있고 d가 있는 | ad, aad .. , bbd, bbd .. , cd, ccd .. 등 |
| abc\+d+e | abc+가 있고 d가 1개 이상 있고 e가 있는 | abc+de, abc+dde, abc+ddde 등 |
| (\[abc\])+d | [abc]가 1개 이상 있고 d가 있는 | [abc]d, [abc][abc]d, [abc][abc][abc]d |
3.3.3.2.3. ?
- quantifier. 바로 앞의 문자와 동일한 문자 0개 또는 1개로 대체한다.
| 형태 | 내용 | 예시 |
| a? | a가 0개나 1개 있는 | , a |
| colou?r | colo다음에 u가 0개나 1개 있고 r이 있는 | color, colour |
| c(ach)?e | c다음에 ach가 0개나 1개 있고 e가 있는 | ce, cache |
| [aeioi]?\? | a,e,i,o,u중 하나가 0기나 1개 있고 ?가 있는 | ?, a?, e?, i?, o?, u? |
3.3.3.2.4. {}
- 지정한 개수만큼 앞의 문자와 동일한 문자로 대체한다.
| 형태 | 내용 | 예시 |
| a{3} | a를 3번 반복하는 | aaa |
| ab{2,4} | a뒤에 b를 2-4번 반복하는 | abb, abbb, abbbb |
| [ab]{4} | a또는 b를 4번 반복하는 (=[ab][ab][ab][ab]) |
aaaa, aaab, aaba, abaa, baaa, abab, abba, bbba, bbbb 등 |
3.3.3.2.5. []
- Character Class. 문자클래스로, 대괄호 안의 지정 문자들의 집합에 속한 하나와 일치하는 문자를 대체한다.
- 기본적으로는 와일드카드의 그것과 같다. 다만 [
| 형태 | 내용 | 예시 |
| find -regex "[ab][6}" | a또는b가 6개 있는 | ababab, babaab, aaabbb 등 (find는 경로값을 출력하기에 /조차 없는 이는 찾아질 수 없다.) |
| find -regex ".*[ab]{6}" | 0개 이상의 문자 뒤에 a또는b가 6개 있는 (a또는b 여섯개로 끝나는) |
/home/osp/ababab, /home/osp/babaab, ./aaabbb 등. (/home/osp/abababcdcd 등은 해당 없음) |
| grep -E ".*[ab]{2}" | 0개 이상의 문자 뒤에 a또는 b가 2개 있는 (a또는b 여섯개로 끝나는 것은 아님) |
하기 예시 참조 |


3.3.3.2.6. ^, $
- 행의 시작, 끝 지시자. 해당 위치가 행의 시작 또는 끝임을 표시한다.
- 정규표현식은 와일드카드처럼 끝까지 밀어버리는 야생마가 아니기 때문에 이런 지시자가 필요할 때가 있다.
| 형태 | 내용 | 예시 |
| ^abc.* | abc로 시작하는 | abc, abcx, abcxy 등 |
| *abc$ | abc로 끝나는 | abc, xabc, xyabc 등 |


3.3.3.3. \
- escape. 문법상 ASCII가 아니라 연산자로 우선 인식되는 *, [], $ 등을 연산자로부터 벗어나 ASCII로 쓰이게 한다.
- 구체적인 예시는 상기에 곳곳에 녹아 있다.
'CS > OS' 카테고리의 다른 글
| 운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 5. 프로세스 관리 (6) | 2024.12.11 |
|---|---|
| 운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 4. 입력/실행/변경 (1) | 2024.12.06 |
| 운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 2. 호출/검색/필터링 (1) | 2024.12.05 |
| 운영체제 : 3.Linux OS 이용/관리 : 3.명령어 : 1. 관리일반 (0) | 2024.12.05 |
| 운영체제 : 3.Linux OS 이용/관리 : 2.특징/구조 (1) | 2024.12.03 |