Bash에서 정규식을 연습할 때 괄호 안에 전체 집합/검색 패턴을 일치시키려고 노력합니다.
대신에 그 안의 모든 문자를 일치시킵니다.
예를 들어,
cd
touch a.c a.h a.o a.cho
ls *.[cho]
일치 ls
:
a.c
a.h
a.o
그러나 의 전체 컬렉션과 일치하지 않습니다 a.cho
.
전체 세트가 일치하지 않는 이유는 무엇이며 어떻게 해야 합니까?
답변1
여기서는 정규식을 사용하지 않고 파일 이름 글로빙 패턴을 사용합니다.
단일 문자 만 일치하므로 (파일 이름 와일드카드 패턴과 정규 표현식 간에 동일함) 세 문자( " 및 " 중 하나를 의미 ) [...]
와 일치하지 않습니다 .cho
[cho]
c
h
o
use 로 시작하는 모든 a.
이름 과 일치합니다 a.*
.
, 또는 로 끝나는 모든 이름을 일치시키려면 a.
먼저 셸 옵션을 로 설정하고 사용하세요.c
h
o
cho
extglob
shopt -s extglob
a.@([cho]|cho)
이와 같은 중괄호 확장은 a.{c,h,o,cho}
명령줄에 파일 이름을 생성하지만 파일이 실제로 존재한다는 보장은 없습니다.
답변2
배쉬를 사용할 수 있습니다지원 확장이것은아니요패턴이지만 문자열 목록
ls *.{c,h,o,cho}
쉘 확장앞으로ls 명령은 다음과 같이 실행됩니다.
ls *.c *.h *.o *.cho
중괄호 확장은 파일 이름 확장 전에 발생하므로 중괄호 안에 glob 패턴을 넣을 수 있습니다.
ls *.{[cho],cho}