리눅스에는 파일이 많은 디렉토리가 있습니다. 그들 중 일부는 비 ASCII 문자를 가지고 있지만 모두 유효한 UTF-8 입니다. 하나의 프로그램에는 ASCII가 아닌 파일 이름으로 작업하는 것을 방해하는 버그가 있으며 영향을받는 파일 수를 알아야합니다. 이 작업 find
을 수행 한 다음 grep 을 수행 하여 비 ASCII 문자를 인쇄 한 다음 wc -l
숫자를 찾으려고합니다. grep 일 필요는 없습니다. Perl , sed , AWK 등과 같은 표준 Unix 정규식을 사용할 수 있습니다 .
그러나 ‘ASCII 문자가 아닌 문자’에 대한 정규식이 있습니까?
답변
이것은 ASCII가 아닌 단일 문자와 일치합니다.
[^\x00-\x7F]
유효한 PCRE ( Perl-Compatible Regular Expression )입니다.
POSIX 속기를 사용할 수도 있습니다 .
[[:ascii:]]
-단일 ASCII 문자와 일치[^[:ascii:]]
-비 ASCII 문자 하나와 일치
[^[:print:]]
아마 당신에게 충분할 것입니다. **
답변
아니요, [^\x20-\x7E]
ASCII가 아닙니다.
이것은 실제 ASCII입니다.
[^\x00-\x7F]
그렇지 않으면 ASCII 테이블의 일부인 줄 바꿈 및 기타 특수 문자가 제거됩니다!
답변
다음 과 같은 유용한 유니 코드 문자 클래스가 포함되어 있으므로 유니 코드 정규 표현식 페이지를 확인할 수도 있습니다 .
\ p {Control} : ASCII 0x00..0x1F 또는 Latin-1 0x80..0x9F 제어 문자.
답변
[^\x00-\x7F]
그리고 [^[:ascii:]]
그래서 일부 제어 바이트 그리워 문자열이 때로는 더 좋은 옵션이 될 수 있습니다. 예를 들어 cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'
터미널에서 이상한 일을 할 strings test.torrent
것입니다.
답변
텍스트 상자의 유효성을 검사하려면 ASCII 만 허용이 패턴 만 사용
[\x00-\x7F]+
답변
나는 그것을 사용 [^\t\r\n\x20-\x7E]+
하고 잘 작동하는 것 같습니다.
답변
이 정규식을 사용할 수 있습니다.
[^\w \xC0-\xFF]
Case ask, 옵션은 Multiline 입니다.