我如何使(non-gnu-)grep忽略二进制文件?

嗨,我在这里的一台HP-UX服务器上。 当recursion地查询目录树时,当树还包含二进制文件时,我遇到了一些问题:grep将它们视为文本文件,并显示包含大量不可打印字符的很长的行。 这不仅使得输出难以扫描,而且还经常使我的terminal无法使用(并且为其标题写入有趣的string)。

GNU-grep有一个选项--binary-file=这将有所帮助(而且它不会为二进制文件打印匹配的行),但是我没有GNU工具可用。

有没有一种方法来模拟GNU-grep的行为,或忽略看起来像二进制文件?

顺便说一句。 如果在perl中有这样一个简单的方法,那也可以。

在前面的答案的基础上,你可以使用“文件”命令来识别文本文件,然后限制你的grep只有这些文件。 例如:

  find dir -type f -print | xargs file | grep text | cut -f1 -d: | xargs grep "expression" 

那是:

  • 查找目录“dir”中的所有文件
  • 将这些作为parameter passing给“文件”
  • 从“文件”中查找包含单词“text”的输出
  • 将第一个以冒号分隔的字段切掉,并将其用作文件名
  • 使用grepsearch这些文件。

这将失败的情况下,包含空格或冒号的文件名,但否则会做你想要的。

可能有更好的方法,但可能会将所有文件传递到shell循环,然后使用file命令执行以下操作:

 if file "$i" | grep text; then ... fi 

…?