在Linux上,我有一个包含大量文件的目录。其中一些具有非ASCII字符,但它们都是有效的UTF-8。一个程序有一个错误,使其无法使用非ASCII文件名,因此我必须找出有多少错误。我打算这样做find,然后执行grep打印非ASCII字符,然后执行a wc -l查找数字。不必是grep;我可以使用任何标准的Unix 正则表达式,例如Perl,sed,AWK等。但是,是否存在“不是ASCII字符的任何字符”的正则表达式?
3 回答
皈依舞
TA贡献1851条经验 获得超3个赞
这将匹配一个非ASCII字符:
[^\x00-\x7F]
这是有效的PCRE(与Perl兼容的正则表达式)。
您还可以使用POSIX速记:
[[:ascii:]] -匹配一个ASCII字符
[^[:ascii:]] -匹配一个非ASCII字符
[^[:print:]] 可能就足够了。**
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
不,[^\x20-\x7E]不是ASCII。
这是真正的ASCII:
[^\x00-\x7F]
否则,它将修剪掉换行符和ASCII表中的其他特殊字符!
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
[^\x00-\x7F]并且[^[:ascii:]]错过了一些控制字节,因此有时字符串可能是更好的选择。例如,cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'它将对您的终端产生奇怪的影响,strings test.torrent并表现正常。
- 3 回答
- 0 关注
- 1052 浏览
添加回答
举报
0/150
提交
取消