정규식에 관해 질문이 있습니다.
두 가지 명령이 있습니다.
find / -regex '.*[^-_./0-9a-zA-Z].*'
find /
내 말이 맞다면 두 명령 모두 동일한 결과를 출력해야 합니다. 왜냐하면 첫 번째 명령에는 .*
먼저 나타나는 정규식이 있기 때문입니다. 이는 "모든 문자를 찾고 그 중 0개 이상이 나타날 수 있음"을 의미합니다. 이는 모든 파일 이름을 의미합니다. 파일 이름은 공백("")을 포함한 모든 문자로 구성될 수 있고 0개의 문자는 불가능하기 때문입니다(파일에 이름이 없음을 의미). 그래서 결국 같은 결과가 나온 것 같아요.
그러나 "결과 라인 출력"을 의미하는 와 함께 이러한 명령을 사용하면 | wc -l
결과가 다릅니다.
내가 뭐 놓친 거 없니?
답변1
예는 다음과 같습니다. * .*는 0개 이상의 임의 문자를 의미합니다. 두 번째 경우에는 제외되지 않은 문자 중 하나가 뒤에 오는 0 문자와 일치합니다.
ls
1 a =a ++a a.0 a_1 B b0
find .
.
./B
./=a
./b0
./a_1
./a
./1
./a.0
./++a
find . -regex '.*[^-_./0-9a-zA-Z].*'
./=a
./++a
답변2
.*
그 뒤에는 -가 오고 [^-_./0-9a-zA-Z]
, 선택사항이 아닙니다. 따라서 이들 문자 중 하나 이외의 문자(문자, 숫자, , , 및 )가 파일 이름에 한 번 나타나야 -
합니다 . 이러한 문자로만 구성된 경로는 인쇄되지 않습니다._
.
/
따라서 이러한 명령은 동일한 결과를 출력할 필요가 없습니다.