为什么 grep 命令不适用于 UTF-16 LE 编码的文本文件?

Lig*_*ami 3 grep utf-8 utf-16

我想保存一个文本文件中以另一个文本文件中的某个字符串开头的所有行。所以,我使用这个grep命令来做到这一点:

grep '^This' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

但是输出文件output.txt是空的,尽管文件中有很多input.txt以单词“this”开头的行。我的一位导师建议该文件input.txtUTF-16 LE格式的,并要求我将其更改为UTF-8. 然后该命令运行良好。

为什么 grep 命令不适用于具有UTF-16 LE格式的文件?

dec*_*eze 6

grep不知道编码。它不搜索“字符”,而是搜索字节。您的控制台正在发送 UTF-8/ASCII 编码文本(在本例中与字符串“^This”相同)进行grep搜索。如果文件包含 UTF-16 编码文本,则不会匹配,因为字节表示不同。