拥有庞大的代码库(主要是 2Gb 代码),其中德语中的有效 utf8 符号被以下符号替换:“�”
有没有办法可以可靠地找到包含此内容的所有文件? Visual Studio Code“有时”会查找文件,但不一致。这很奇怪。
grep -rnw . -e '�'
只能在少数二进制文件和 .png 文件中找到它们,而在文本文件(.c、.h、.m 等)中根本找不到它们。
有任何想法吗?非常感谢!
答案1
答案应该基于:
grep -axv '.*' file.txt
查找(递归地)所有文件名( -l
) 包含无效字符,请使用:(
是,不需要文件名)
grep -rlaxv '.*'
在
grep -axv '.*'
- -a 是打开对 grep 可能显示为二进制(而不是文本)的文件。
- 用于
-x
选择整行(下一个选项需要)。 - 是
-v
反转所选择的内容(与 协同工作-x
)。 - 正则表达式
.*
将匹配任何有效的特点。与 反转-v
,整个命令将匹配包含任何内容的任何整行无效的特点。
但是,请理解有效或无效的定义取决于正在读取的文件的编码。如果您的系统默认使用 UTF-8 编码,则该命令将检测无效的 UTF-8 序列。更改您的区域设置以检测其他编码。
此外,该命令的目标是找到无效的人物。如果目标是查找实际字符“�”,则只需搜索它们:
grep -oP '�' file
或者,为了避免混淆它是哪个字符(在 bash、ksh、zsh 中),列出匹配的文件名:
grep -rloP $'\Ufffd'
更多的这个答案中给出了详细信息
当然,这不会使固定文件,只需列出它们。要实际修复文件(如果可能),请发布问题的示例。两三行就足够了。