我想找一个希腊语的单词 μάθηση
文件中,用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(对于不知道的人来说。苹果公司出于许可的考虑,改用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上测试,使用 bash
和 zsh
)
(*): 只要两个文件的编码是一样的,这个解决方案就应该有效(你可以使用 file
命令,记住7位ASCII是UTF-8的一个子集,但也是所有ISO-8859-*编码的子集)。)