查找文件中的非ASCII文本

问题描述 投票:0回答:1

我想找一个希腊语的单词 μάθηση 文件中,用Unicode字符表示就是 \u03bc\u03ac\u03b8\u03b7\u03c3\u03b7 使用 grep. 我试过这个命令

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

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

search unicode grep word non-ascii-characters
1个回答
1
投票

这个命令在我的Mac上可以用 zsh:

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

而以下内容在我的Mac上可以使用 bash 3.2.57(对于不知道的人来说。苹果公司出于许可的考虑,改用zsh,而不是改用bash 4版。)

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

内置版的 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

(在Mac上测试,使用 bashzsh)

(*): 只要两个文件的编码是一样的,这个解决方案就应该有效(你可以使用 file 命令,记住7位ASCII是UTF-8的一个子集,但也是所有ISO-8859-*编码的子集)。)

© www.soinside.com 2019 - 2024. All rights reserved.