【发布时间】:2020-11-07 03:00:01
【问题描述】:
在一个文件夹中存在三个相同的txt-文件,每个文件里面只有一个词:“你好”。第一个文件用UTF-8 编码,第二个文件用UTF-16 编码,最后一个文件用UTF-32 编码(所有文件都是在linux 上创建的)。但是使用 grep
grep -i "hello" *.txt
只返回一个结果,它是UTF-8-文件。 Grep 没有找到其他两个文件。
如何 grep 部分包含 UTF-16 或 UTF-32 编码文件的文件夹?
【问题讨论】:
-
你在搜索什么样的文字?只是 UTF-16 或更复杂(和通用解决方案)中的 ASCII 文本?
-
如上所述,只是简单的文本。文本文件只包含一个单词:“你好”,请。见上文。
-
grep -ai 'h.e.l.l.o' [UTF16] 和 3 个点 [UTF32]。这无需知道字节序或分开 BOM 即可工作。 (最好使用
\0(但在redex中包含更复杂)而不是. -
我很惊讶,
grep -ai 'h.e.l.l.o'找到了所有 UTF-16 文件。 -
ASCII 码
xx在 UTF-8 中是xx,在 UTF-16 和00 00 00 xx或xx 00 00 00中是00 xx或xx 00(但在同一文件中的格式相同)在 UTF-32 中。这仅适用于 ASCII 字符。 \0 通常在 shell 中被忽略(它用于某些命令,例如find、xargs)
标签: linux encoding grep utf-16 utf-32