![grep 패턴 '[^a-z0-9\.\/_\-\ +@)(&]'이 '-'와 일치하는 이유](https://rvso.com/image/1636258/grep%20%ED%8C%A8%ED%84%B4%20'%5B%5Ea-z0-9%5C.%5C%2F_%5C-%5C%20%2B%40)(%26%5D'%EC%9D%B4%20'-'%EC%99%80%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0.png)
말도 안되는 파일 이름을 가진 파일을 찾으려고 합니다. 나는 다음 명령을 사용하고 있습니다 :
find . -type f | egrep -i '[^a-z0-9\.\/_\-\ +@)(&]'
하지만 빼기 문자 '-'가 포함된 파일 이름과 일치하기 때문에 조금 어리둥절합니다. 왜? 그리고 그것을 고치는 방법은 무엇입니까?
편집: 이 동작을 재현 가능하게 확인하는 절차:
마이너스 기호만 포함된 testfile이라는 테스트 파일을 만들었습니다.
$ hexdump -C testfile
00000000 2d |-|
egrep -i '[^a-z0-9\.\/_\-\ +@)(&]' testfile
이 빼기 기호와 일치합니다.
답변1
하이픈은 문자 클래스에서 특별한 의미를 가지며 문자 범위를 나타냅니다.
문자 클래스 끝에 하이픈을 넣고 불필요한 이스케이프를 제거합니다.
find . -type f | egrep -i '[^a-z0-9./_ +@)(&-]'