我试图在包含一些非 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]*$'