grep:查找包含日语汉字的所有行

grep:查找包含日语汉字的所有行

在一个巨大的 UTF-8 文本文件中,我想显示包含日语的所有行汉字。这是
什么grep(或其他)表达?

\u4e00如果我没记错的话,汉字是和之间的字符\u4dbf

我不需要展示喀纳斯,但也展示它们也不是什么大问题。

答案1

不可能(不使用巨大的桌子)区分日语汉字和日语中未使用的汉字表意文字(例如中文或韩语变体)。

如果您只想检测基本范围(\u4e00 到 \u9fff)内的任何汉字表意文字,那么它们会以 3 个字节进行编码,第一个字节始终在 0xe4 和 0xe9 之间,第二个和第三个字节在 0x80 和 0xbf 之间。

这里有两个困难,首先你必须告诉 grep 你要处理字节而不是字符;然后您必须键入 0xe4、0xe9、0x80 和 0xbf 字节以将它们放入正则表达式中。

我发现 -P 开关可以同时执行这两种操作;你想要的行是:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]"

如果你也想要假名:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]|\xe3[\x81-\x83][\x80-\xbf]"

答案2

根据第五表这里\u4e00、 汉字是和之间的字符\u9fff

我的实现grep似乎无法处理 unicode 字符(即 Archlinux 上的 GNU grep 2.14),但我们仍然可以使用\x.可以找到相应的代码这里或者使用类似的工具hexedit来获取它们。

对于上面我们感兴趣的范围内的任何内容e9 be a5都返回“无效的排序字符”,所以这就是我想出的:

grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt

相关内容