(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
것입니다.
나는 그것을 사용 [^\t\r\n\x20-\x7E]+
하고 잘 작동하는 것 같습니다.
정규식이 실제로 필요하지 않습니다.
printf "%s\n" *[!\ -~]*
이름에 제어 문자가있는 파일 이름도 표시되지만 그 기능을 고려합니다.
일치하는 파일이 없으면 설정하지 않은 한 glob가 그 자체로 확장됩니다 nullglob
. (표현식 자체와 일치하지 않으므로 기술적으로이 출력은 명확하지 않습니다.)
이 정규식을 사용할 수 있습니다.
[^\w \xC0-\xFF]
Case ask, 옵션은 Multiline 입니다.
이것은 매우 유연하고 확장 가능한 것으로 판명되었습니다. $ field = ~ s / [^ \ x00- \ x7F] // g; # 따라서 모든 비 ASCII 또는 특정 항목을 청소할 수 있습니다. 결국 해시 키가 될 항목을 선택하거나 사전 처리하는 데 매우 좋습니다.
텍스트 상자의 유효성을 검사하려면 ASCII 만 허용이 패턴 만 사용
[\x00-\x7F]+
참고 URL : https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters
'IT' 카테고리의 다른 글
정규식을 사용하여 문자를 대문자로 변환 (EditPad Pro) (0) | 2020.06.09 |
---|---|
jQuery UI 대화 상자가 첫 번째 텍스트 상자에 초점을 설정하지 못하게하십시오. (0) | 2020.06.09 |
유형이 원시인지 테스트하는 방법 (0) | 2020.06.09 |
두 날짜 사이의 모든 날짜-날짜 인쇄 (0) | 2020.06.09 |
문자열에 숫자가 포함되어 있는지 확인 (0) | 2020.06.09 |