Skip to content

grep 遇到二进制数据时的处理

问题

使用 grep 过滤日志时,输出提示:

Binary file (standard input) matches

而非预期的匹配内容。

原因

grep 检测到输入流中包含非文本字节(如空字节 \x00、非法 UTF-8 序列等),将其识别为二进制文件,默认只输出匹配提示而非具体内容。

解决方案

方案 1:强制文本模式(推荐)

bash
tail -f ebox.log | grep -a "\[config"

-a / --text 参数强制将输入当作文本处理。

方案 2:过滤二进制字符

bash
tail -f ebox.log | strings | grep "\[config"

strings 只提取可打印字符,但会丢失原始格式。

方案 3:指定二进制文件处理方式

bash
tail -f ebox.log | grep --binary-files=text "\[config"

建议

排查日志来源,确认是否有程序输出了非文本内容。

基于 VitePress 构建