나는 echo file|grep fil*
실패를 발견했지만 echo abcd|grep abc*
성공했습니다.
이해가 안가는데 누가 설명해주실 수 있나요?
답변1
귀하의 예에는 두 가지 문제가 있습니다.
첫 번째는 당신의 가정입니다일반적인 표현작업 방법글로벌 모드여기에는 *
"모든 문자 시퀀스"를 의미하는 와일드카드가 있습니다. 정규식에서는 *
"이전 원자의 수"를 의미하므로 뒤에 0개 이상의 문자가 fil*
오는 것을 의미합니다 . 의도된 의미를 얻으려면 다음과 같이 말해야 합니다 . "모든 단일 문자, 즉 "모든 문자 시퀀스"를 의미합니다.f
i
l
grep fil.*
.
.*
더 작은 문제는 따옴표 없이 사용하는 특수 문자가 전역 규칙에 따른 의미를 의미하므로 쉘이 이를 해석할 수 있다는 것입니다. 로컬 디렉터리 fil*
또는 에 glob 패턴과 일치하는 파일이 있는 abc*
경우쉘이 이를 확장합니다., grep
예상되는 RE 대신 확장된 파일 이름을 패턴으로 사용합니다. 명령줄에서 이러한 문자를 사용할 때마다 따옴표로 묶어야 합니다 echo file | grep 'fil.*'
.