Bash 자체는 정규 표현식을 이해하지 못 합니다. 스크립트에서는 sed 와 awk 같은 명령어나 유틸리티가 정규 표현식을 해석해 줍니다.
Bash는 "globbing"이라고 하는 파일명 확장을 수행해 주는데 이는 표준 정규 표현식을 쓰지 않고, 대신에 와일드 카드를 인식하고 확장해 줍니다. globbing은 표준 와일드 카드 문자인 *, ?, 대괄호속의 문자 목록, 다른 특수 문자들(일치하지 않도록 부정해 주는 ^ 같은 문자)을 해석해 줍니다. 하지만 globbing시, 와일드 카드 문자 사용에는 중요한 몇가지 제한 사항이 있습니다. 예를 들어, *는 .bashrc처럼 점으로 시작하는 파일과 일치하지 않습니다. [1] 비슷하게, ?도 파일명 확장에서 쓰이면 정규 표현식의 일부분으로 쓰일 때와는 다른 의미를 갖습니다.
bash$ ls -l total 2 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l t?.sh -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh bash$ ls -l [ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 bash$ ls -l [a-c]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 bash$ ls -l [^ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l {b*,c*,*est*} -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ echo * a.1 b.1 c.1 t2.sh test1.txt bash$ echo t* t2.sh test1.txt |
echo 명령어도 파일이름에 대해서 와일드 카드 확장을 해 줍니다.
예 10-4를 참고하세요.
[1] | 파일명 확장은 직접적으로 점(dot)을 표시해줘야 도트파일(dotfile)과 일치합니다.
|