搜索包含非 ASCII 字符的文件

搜索包含非 ASCII 字符的文件

我试图在包含一些非 ASCII Unicode 字符的目录中查找文件。我事先并不知道我必须找到的确切字符。

从概念上讲,这应该是一项简单的任务 - 查找与 regex 匹配的所有文件[^\0-\x7f]。但是,我无法想出真正可以做到这一点的东西。

我能想到的最接近的事情是:

find . -type f -exec grep -Plv '[\0-\x7f]' {} \;

由于空行上的匹配,最终列出了大多数正常的文本文件。

-e开关不允许与 结合使用,-P因此我无法使用-e '[\0-\x7f]' -e '^$',并且将正则表达式转换为[\0-\x7f]|^$显然是错误的,因为现在它是一个“或”。

还有其他方法来搜索此类字符吗?

答案1

使用 时grep -Pv '[\0-\x7f]',您要求的行不-v包含 ( ) ASCII 字符。这与包含非 ASCII 字符的行不同。就问这个吧。

LC_ALL=C grep -lP '[^\0-\x7f]'

您可以询问 ASCII 语言环境中的不可打印字符,而不是代码点范围。这几乎是等价的(它还包括控制字符)。

LC_ALL=C grep -l '[^[:print:]]'

一种等效的、更复杂的方法是搜索完全由 ASCII 字符组成的行并反转匹配。

LC_ALL=C grep -vlP '^[\0-\x7f]*$'

相关内容