정규식에서 명령 찾기

정규식에서 명령 찾기

정규식에 관해 질문이 있습니다.

두 가지 명령이 있습니다.

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], 선택사항이 아닙니다. 따라서 이들 문자 중 하나 이외의 문자(문자, 숫자, , , 및 )가 파일 이름에 한 번 나타나야 -합니다 . 이러한 문자로만 구성된 경로는 인쇄되지 않습니다._./

따라서 이러한 명령은 동일한 결과를 출력할 필요가 없습니다.

관련 정보