嗨,我在这里的一台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"
那是:
这将失败的情况下,包含空格或冒号的文件名,但否则会做你想要的。
可能有更好的方法,但可能会将所有文件传递到shell循环,然后使用file命令执行以下操作:
if file "$i" | grep text; then ... fi
…?