我在 Ubuntu 上输入cat .bash_history | grep git
并返回
二进制文件(标准输入)匹配
Mybash_history
确实存在,并且其中有很多行以git
.
是什么导致它显示此错误以及如何修复它?
答案1
答案2
据推测,该文件.bash_history
以非文本数据开头,因此grep
将该文件视为二进制文件。输出证实了这一点file .bash_history
:
.bash_history: data
您可以从头开始读取几个字节以获得一致的视图:
head -c1K .bash_history
我在这里先读 1 KiB。
您可以将 STDOUT 通过管道传输到hexdump
/od
或类似的。
作为旁注,grep
将文件名作为参数,因此cat
在这里没有用;尝试这个:
grep git .bash_history
答案3
这可能是由 bash 历史记录中的空字节引起的。删除包含空字符的行可能会解决该问题。您可以使用 grep 的 Perl-regexp 模式检查它们:
grep -Pa '\x00' .bash_history
这个帖子对非 UNIX 系统有建议。
答案4
错误是由于文件中的数据是二进制的,您可以使用 strings 命令来查看strings
您通常使用的搜索的人类可读(即)部分grep
strings data | grep -i whatever