정규식 VS 파일 이름 글 로빙


15

정규 표현식은 문자와 문자열에만 사용해야한다는 것을 알고 있지만 때로는 파일 이름에서 찾을 수 있습니다. 내 질문은 : 정규 표현식 은 문자 또는 파일 이름 에만 사용됩니까?

답변:


19

정규 표현식과 파일 이름 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디자인에 의한 정규식으로 해석합니다.

요약하면, 쉘은 와일드 카드를 사용하는 고유 한 언어를 사용하여 명령 행을 해석합니다. 명령, 프로그램은 작성자가 디자인 한 방식으로 매개 변수를 해석합니다.


4

파일 이름이 문자열 인 경우 파일 이름에도 정규식을 사용할 수 있습니다. 예를 들어, 정규식과 일치하는 파일 이름을 찾으려면 다음을 시도하십시오.

find ./ -regex '.*[abc][xyz].*'

이 명령은 이름에 a, b 또는 c가 있고 x, y 또는 z가있는 파일을 찾습니다. 이것은 하나의 예일뿐입니다. 끝없는 가능성이 있습니다.


그러나 인터프리터가 조커이든 정규 표현식이든 어떻게 다른가? 예 : $ grep a "asterix"b a "asterix".txt
Hamza

2
사용 find ./ -name 'a*'하는 경우 *를 와일드 카드로 사용 하십시오. 을 입력 find ./ -regex 'a*'하면 정규식에서 *를 사용합니다. 중요한 차이점은 스위치 -name또는 -regex입니다.
아무도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.