在Linux上,我有一个有很多文件的目录。其中一些具有非ascii字符,但它们都是有效的UTF-8。有一个程序有一个错误,阻止它处理非ascii文件名,我必须找出有多少受到影响。我打算用find来做这个,然后用grep来打印非ascii字符,然后用wc -l来查找数字。不一定是grep;我可以使用任何标准的Unix正则表达式,如Perl、sed、AWK等。
然而,是否存在“非ASCII字符的任何字符”的正则表达式?
在Linux上,我有一个有很多文件的目录。其中一些具有非ascii字符,但它们都是有效的UTF-8。有一个程序有一个错误,阻止它处理非ascii文件名,我必须找出有多少受到影响。我打算用find来做这个,然后用grep来打印非ascii字符,然后用wc -l来查找数字。不一定是grep;我可以使用任何标准的Unix正则表达式,如Perl、sed、AWK等。
然而,是否存在“非ASCII字符的任何字符”的正则表达式?
当前回答
[^\x00-\x7F]和[^[:ascii:]]缺少一些控制字节,因此字符串有时是更好的选择。比如猫测试。bt | perl -pe 's/[^[:ascii:]]+/\n/g'将对您的终端做一些奇怪的事情,其中作为字符串测试。Torrent会正常运行。
其他回答
[^\x00-\x7F]和[^[:ascii:]]缺少一些控制字节,因此字符串有时是更好的选择。比如猫测试。bt | perl -pe 's/[^[:ascii:]]+/\n/g'将对您的终端做一些奇怪的事情,其中作为字符串测试。Torrent会正常运行。
你也可以检查这个页面:Unicode正则表达式,因为它包含一些有用的Unicode字符类,比如:
\p{Control}: an ASCII 0x00..0x1F or Latin-1 0x80..0x9F control character.
你可以使用这个正则表达式:
[^\w \xC0-\xFF]
情况询问,选项是多线。
不,[^\x20-\x7E]不是ASCII。
这是真正的ASCII:
[^\x00-\x7F]
否则,它将删除换行符和ASCII表中的其他特殊字符!
这被证明是非常灵活和可扩展的。 $field =~ s/[^\x00-\x7F]//g;#这样所有非ASCII或特定的项目都可以被清除。无论是在选择还是对最终将成为哈希键的项进行预处理方面都非常好。