*
나는 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.txt
grep
set -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