在文件中查找非 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
(使用 bash
和 zsh
在 Mac 上测试)
(*):只要两个文件的编码相同,此解决方案就应该有效(您可以使用 file
命令检查编码,请记住 7 位 ASCII 是一个子集UTF-8,还有所有 ISO-8859-* 编码)。
我试图在一个文件中找到希腊词 μάθηση
,在 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
(使用 bash
和 zsh
在 Mac 上测试)
(*):只要两个文件的编码相同,此解决方案就应该有效(您可以使用 file
命令检查编码,请记住 7 位 ASCII 是一个子集UTF-8,还有所有 ISO-8859-* 编码)。