¿Cómo hago (no-gnu-) grep ignorar los files binarys?

Oye, estoy en un server HP-UX aquí. Cuando recursivamente grepping un tree de directory, tengo problemas cuando el tree también contiene files binarys: grep los trata como files de text y muestra líneas muy largas que contienen una gran cantidad de caracteres no imprimibles. Esto no sólo hace que la salida sea difícil de escanear, sino que a menudo hace que mi terminal sea inutilizable (y graba strings divertidas en su título).

GNU-grep tiene una opción --binary-file= que ayudaría (y no imprime la línea de coincidencia de todos modos para los files binarys), pero no tengo GNU-tools availabe.

¿Existe una manera de simular el comportamiento de GNU-grep o ignorar files que parecen ser binarys?

Por cierto. si hay una manera fácil de hacer esto en Perl, que estaría bien, también.

Basándose en la respuesta anterior, puede utilizar el command "file" para identificar files de text y, a continuación, limitar su grep sólo a esos files. Por ejemplo:

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

Eso es:

  • Buscar todos los files en el directory "dir"
  • Pasar estos como arguments para "file"
  • Busque la salida de "file" que contiene la palabra "text"
  • Corte el primer campo delimitado por dos puntos y utilícelo como nombre de file
  • Buscar estos files con grep.

Esto fallará en el caso de nombres de file que contienen espacios en blanco o dos puntos, pero de lo contrario hará lo que quiera.

Puede haber una mejor manera, pero tal vez pasar todos los files a un bucle de shell, y hacer algo como lo siguiente con el command file:

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

…?