在文件中查找非 ASCII 文本

Find non-ASCII text in a file

我试图在一个文件中找到希腊词 μάθηση,在 Unicode 字符中它是 \u03bc\u03ac\u03b8\u03b7\u03c3\u03b7 使用 grep。我试过这个命令

grep -r $"\u03bc\u03ac\u03b8\u03b7\u03c3\u03b7" filename.txt

但是失败了。有什么帮助吗?

这适用于我的 Mac 和 zsh:

fgrep "$(echo '\u03bc\u03ac\u03b8\u03b7\u03c3\u03b7')" filename.txt

以及以下在我的 Mac 和 bash 3.2.57 上的工作(对于那些不知道的人:Apple 切换到 zsh 而不是切换到 bash 版本 4,因为许可问题)

fgrep "$(echo -e '\xce\xbc\xce\xac\xce\xb8\xce\xb7\xcf\x83\xce\xb7')" filename.txt

bash 中 echo 的内置版本(您可以使用 man bash 阅读, 而不是 使用 man echo ) 需要 -e 选项来扩展某些转义序列(在本例中为 \x),但 \u (Unicode) 不在其中。我不知道这在 bash.

的较新版本中是否有所不同

为了找到搜索字符串的 UTF-8 十六进制表示形式,我对一个文本文件进行了 od -tx1,其中我写了 μάθηση。当然,这里我假设您的文件是 UTF-8 编码的。


以下应该始终有效,但是:(*)

在1行文件中写μάθηση,假设它叫grepfile.txt,然后

fgrep -f grepfile.txt filename.txt

(使用 bashzsh 在 Mac 上测试)

(*):只要两个文件的编码相同,此解决方案就应该有效(您可以使用 file 命令检查编码,请记住 7 位 ASCII 是一个子集UTF-8,还有所有 ISO-8859-* 编码)。