我在代码库中遇到了.cpp
文件,被grep视为二进制文件。所以我不能像文本文件那样把它弄得一团糟,这很烦人,显然不应该是应该如何做的。所以我想知道为什么grep认为该文件是二进制文件并解决了这个问题。
我试图使用命令
找到任何不同寻常的字符grep -Pna --color -r "[\x00-\x08]|[\x10-\x19]|[\x80-\xFF]" test.cpp
但它不会产生任何匹配。
如何弄清楚这个问题的原因?
我应该在Windows git bash上提及我。
语言环境的输出:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
答案 0 :(得分:2)
由于您使用的是MS Windows,因此test.cpp
文件可能使用UTF-16(在最新版本的Windows中很常见)或Windows-1252(CP-1252)作为其字符编码进行编码(也许是其中一条评论中的印刷报价。)
当您的语言环境设置为UTF-8且grep
检测到该语言环境的无效字符时,它会假定该文件是二进制文件。快速解决此问题的方法是,在运行grep
命令时,通过临时修改C
环境变量,让LC_ALL
使用grep
语言环境:
LC_ALL=C grep pattern test.cpp
更好的长期解决方案是将文本文件(使用iconv
或您喜欢的文本编辑器)转换为使用UTF-8作为其字符编码。