(grep)正则表达式以匹配非ASCII字符?

在Linux上,我有一个包含大量文件的目录。其中一些具有非ASCII字符,但它们都是有效的UTF-8。一个程序有一个错误,使其无法使用非ASCII文件名,因此我必须找出有多少错误。我打算这样做find,然后执行grep打印非ASCII字符,然后执行a wc -l查找数字。不必是grep;我可以使用任何标准的Unix 正则表达式,例如Perl,sed,AWK等。

但是,是否存在“不是ASCII字符的任何字符”的正则表达式?



萧十郎
浏览 1053回答 3
3回答

皈依舞

这将匹配一个非ASCII字符:[^\x00-\x7F]这是有效的PCRE(与Perl兼容的正则表达式)。您还可以使用POSIX速记:[[:ascii:]] -匹配一个ASCII字符[^[:ascii:]] -匹配一个非ASCII字符[^[:print:]] 可能就足够了。**

慕盖茨4494581

不,[^\x20-\x7E]不是ASCII。这是真正的ASCII: [^\x00-\x7F]否则,它将修剪掉换行符和ASCII表中的其他特殊字符!

海绵宝宝撒

[^\x00-\x7F]并且[^[:ascii:]]错过了一些控制字节,因此有时字符串可能是更好的选择。例如,cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'它将对您的终端产生奇怪的影响,strings test.torrent并表现正常。
打开App,查看更多内容
随时随地看视频慕课网APP