답변:
정규 표현식과 파일 이름 globbing은 매우 다른 두 가지입니다.
정규 표현식은 텍스트에서 패턴 일치를위한 명령 / 함수에 사용됩니다. 예를 들어의 패턴 매개 변수 grep
또는 프로그래밍 언어에서.
파일 이름 globbing은 와일드 카드를 사용하여 파일 및 디렉토리 이름을 일치시키기 위해 쉘에서 사용합니다. 글러브 기능은 쉘에 따라 다릅니다. 예를 들어 Bash는 다음과 같은 와일드 카드를 지원합니다.
*
0 자 이상 일치?
1 자 일치[...]
지정된 세트의 문자와 일치이러한 와일드 카드는 정규식과 비슷하게 보일 수 있으며 실제로 [...]
globbing과 regex에서 동일한 의미를 갖습니다. 그러나 *
및 ?
글 로빙과 정규 표현식에서 평균 다른 것.
당신이 쓴 의견에서 :
그러나 인터프리터가 조커이든 정규 표현식이든 어떻게 다른가? 예를 들면 다음과 같습니다.
grep a*b a*.txt
?
쉬운. 일종의.
우선, 쉘은 와일드 카드를 파일 이름과 일치시켜 와일드 카드를 해석하려고 시도합니다. "a"로 시작하고 "b"로 끝나는 파일이 있으면 쉘은 a*b
일치하는 파일 이름으로 바뀝니다. 동일합니다 a*.txt
. 일치하는 파일 이름이 없으면 쉘은 grep
문자 그대로 그대로 인수를 전달합니다 .
그러나의 첫 번째 매개 변수 grep
는 패턴이어야합니다. 실제 사용 사례의 99.999 %에서 첫 번째 매개 변수가 쉘에 의해 해석되는 것을 원하지 않습니다. 아마도 대부분의 의도는 다음과 같습니다.
grep "a*b" a*.txt
인용 덕분에 a*b
쉘은 globbing을 사용하여 해석하지 않고 대신에 직접 전달합니다 grep
. 차례로, 이것을 grep
디자인에 의한 정규식으로 해석합니다.
요약하면, 쉘은 와일드 카드를 사용하는 고유 한 언어를 사용하여 명령 행을 해석합니다. 명령, 프로그램은 작성자가 디자인 한 방식으로 매개 변수를 해석합니다.
파일 이름이 문자열 인 경우 파일 이름에도 정규식을 사용할 수 있습니다. 예를 들어, 정규식과 일치하는 파일 이름을 찾으려면 다음을 시도하십시오.
find ./ -regex '.*[abc][xyz].*'
이 명령은 이름에 a, b 또는 c가 있고 x, y 또는 z가있는 파일을 찾습니다. 이것은 하나의 예일뿐입니다. 끝없는 가능성이 있습니다.
find ./ -name 'a*'
하는 경우 *를 와일드 카드로 사용 하십시오. 을 입력 find ./ -regex 'a*'
하면 정규식에서 *를 사용합니다. 중요한 차이점은 스위치 -name
또는 -regex
입니다.