[regex] (grep) 정규식이 아닌 ASCII 문자와 일치합니까?

리눅스에는 파일이 많은 디렉토리가 있습니다. 그들 중 일부는 비 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 입니다.