我有一个可执行文件,它生成一个文本文件作为其输出。问题是文本文件带有某种二进制文件标志。结果是这样的:
$ 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 在前一千个左右的字节中查找空字符,然后从中确定文件是否为“二进制”,所以我的问题有两个:
是否有一种简单的方法可以从我的文件中去除空字符(我可以将其作为后期处理的一部分)以确保 grep 在没有 -a 标志的情况下正常工作?
我应该在代码中寻找一些明显的东西来防止将空字符写入文件吗?我已经非常彻底地查看了代码,我没有看到任何明显的罪魁祸首。
.
我至少可以回答第一个问题。如果您使用的是 Unix/Linux,则可以使用 tr
tr -d '\000' < filein > fileout
Run Code Online (Sandbox Code Playgroud)
其中 \000 是空字符。您还可以删除所有不可打印的字符,如您在此处的示例中所见:“Unix 文本编辑:sed、tr、cut、od、awk”
关于您的第二个问题,我不知道您的编程语言是哪种,但我会搜索未初始化的变量,这些变量可能最终会被打印到输出文件中。
我来猜一猜......
您的程序以 UTF-16 格式写入文件,这是一种 Unicode 编码,每个字符使用两个字节。大多数情况下,每隔一个字节都是一个空值。
iconv -f utf-16 -t utf-8 < filein > fileout
Run Code Online (Sandbox Code Playgroud)
将其转换为 UTF-8,大多数 coreutils 都可以接受。
| 归档时间: |
|
| 查看次数: |
5578 次 |
| 最近记录: |