bash 정규식: 별표는 grep을 사용하여 모호한 검색 결과를 제공합니다.

bash 정규식: 별표는 grep을 사용하여 모호한 검색 결과를 제공합니다.

*나는 grep을 통해 메타 문자를 테스트하기 위해 간단한 텍스트 파일을 사용하고 있습니다. 텍스트 파일은 다음과 같습니다.

1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

이제 grep을 사용하여 숫자 1을 검색하면 다음과 같습니다.

grep 1* regex.txt

출력은 다음과 같습니다

1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

문자 "d"의 경우에도 결과는 빨간색으로 강조 표시된 "d"와 동일하지만 문자 "a" 및 "b"의 경우 다음 검색 명령은 출력되지 않습니다.

grep a* regex.txt
grep b* regex.txt

다음 명령은 예상되는 출력을 제공합니다.

grep "a*" regex.txt
grep "b*" regex.txt

왜 이런거야? bash"a"와 "b"보다 문자 "d"가 선호되는 이유

답변1

이는 인용되지 않고 쉘에 의해 확장되기 때문에 발생 a*합니다 b*.앞으로예를 들어 다음 디렉토리를 고려 grep하십시오.

$ ls    
afile.txt bfile.txt regex.txt

실행하려고 하면 grep a* regex.txt검색 모드로 a*변경됩니다 . bash의 디버깅 옵션( )을 사용하여 다음을 시연할 수 있습니다.afile.txtgrepset -x

$ set -x
$ grep a* regex.txt
+ grep --color afile.txt regex.txt

d작동하지만 작동하지 않는 a이유 는 b현재 디렉토리에 및 로 시작하는 이름을 가진 a파일이나 디렉토리가 있기 때문입니다. b이렇게 하지 않으면 작동합니다.

$ ls
afile.txt bfile.txt regex.txt
$ grep a* regex.txt  ## no output, it's searching for 'afile.txt'
$ rm afile.txt       ## now there are no filenames starting with a
$ grep a* regex.txt
1
11
111
1111
11111
111111

d
da
daa
daaa

b
bc
bcc
bccc

이를 방지하려면언제나검색 패턴 인용:

grep "a*" regex.txt

또는

grep 'a*' regex.txt

관련 정보