我在将文本文件标记为二进制文件时遇到问题

bri*_*lcd 4 linux grep

我有一个可执行文件,它生成一个文本文件作为其输出。问题是文本文件带有某种二进制文件标志。结果是这样的:

$ grep "grep string" output_file.txt
Binary file output_file.txt matches.

$ grep -a "grep string" output_file.txt
[correct results]
Run Code Online (Sandbox Code Playgroud)

一些阅读表明 grep 在前一千个左右的字节中查找空字符,然后从中确定文件是否为“二进制”,所以我的问题有两个:

  1. 是否有一种简单的方法可以从我的文件中去除空字符(我可以将其作为后期处理的一部分)以确保 grep 在没有 -a 标志的情况下正常工作?

  2. 我应该在代码中寻找一些明显的东西来防止将空字符写入文件吗?我已经非常彻底地查看了代码,我没有看到任何明显的罪魁祸首。

    .

DrN*_*one 6

我至少可以回答第一个问题。如果您使用的是 Unix/Linux,则可以使用 tr

tr -d '\000' < filein > fileout
Run Code Online (Sandbox Code Playgroud)

其中 \000 是空字符。您还可以删除所有不可打印的字符,如您在此处的示例中所见:“Unix 文本编辑:sed、tr、cut、od、awk”

关于您的第二个问题,我不知道您的编程语言是哪种,但我会搜索未初始化的变量,这些变量可能最终会被打印到输出文件中。


use*_*686 5

我来猜一猜......

您的程序以 UTF-16 格式写入文件,这是一种 Unicode 编码,每个字符使用两个字节。大多数情况下,每隔一个字节都是一个空值。

iconv -f utf-16 -t utf-8 < filein > fileout
Run Code Online (Sandbox Code Playgroud)

将其转换为 UTF-8,大多数 coreutils 都可以接受。