grep devuelve "coincidencias de archivo binario (entrada estándar)" cuando intenta encontrar un patrón de cadena en el archivo


71

Estoy en Ubuntu y escribí cat .bash_history | grep gity regresó

El archivo binario (entrada estándar) coincide

Mi bash_historysí existe y hay muchas líneas que comienzan con git.

¿Qué causó la visualización de este error y cómo puedo solucionarlo?


¿Cuál es la salida de file .bash_history( file ~/.bash_history)?
heemayl

la salida es.bash_history: data
answerSeeker

por alguna razón, esto solo estaba sucediendo con mis registros de apache. gracias por las
preguntas

Respuestas:


11

Presumiblemente, el archivo .bash_historycomienza con datos que no son de texto, por greplo tanto, trata el archivo como binario. Esto se confirma por la file .bash_historysalida:

.bash_history: data 

Puede leer algunos bytes desde el principio para tener una vista conforme:

head -c1K .bash_history 

Aquí estoy leyendo primero 1 KiB.

Puede canalizar el STDOUT a hexdump/ odo similar.


Como nota al margen, greptoma los nombres de archivo como argumento, por lo que cates inútil aquí; solo haz:

grep git .bash_history

Todavía no estoy seguro de cómo resolver el problema grep, head -c1k .bash_historylea las primeras 38 líneas de mi archivo .bash_history. Todo era legible
answerSeeker

2
@TatakaiWasumi ¿Cuál es la salida de grep -a git .bash_history?
heemayl

1
¡Eso funciono! Obtuve todo lo que quería de él. ¿Qué -ahacer?
answerSeeker

66
@TatakaiWasumi -ahace grepque el archivo sea tratado como binario.
heemayl

3
-ahacer grepprocesar un archivo binario como si fuera texto.
lashgar

128

Puedes usar grep -a 'pattern'.

de la página man grep :

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

Esto me ha ayudado cuando uso la -zbandera para que coincida en varias líneas.
stragu

Esta respuesta debería ser la mejor para esta pregunta.
Michael Pacheco

Sí, esta respuesta es mucho más adecuada!
Daywalker

3

He visto esta pregunta hoy, porque tuve el mismo problema cuando quería agarrarme .bash_history. (Pequeña nota: cambié el nombre de mi historial para que se creara uno nuevo. Este nuevo historial no se trató como un binario).

En @heemayls answer se dice que greptoma nombres de archivo y catsería inútil. Esto no es enteramente verdad. Desde grepla página de manual de s:

Si no se especifican archivos, o si se proporciona el archivo "-", grep busca entradas estándar.

Para que pueda usarlo caty canalizarlo grep. Sin embargo, esto no resuelve el problema que .bash_historyse trata como un binario. Lo único correcto es usar grep -a(Me gusta en la respuesta de @AK_) ya sea grepel historial directamente o con catuna tubería.


cat .bash_history | grep -a git

o

grep -a git .bash_history


¡Gracias! Funciona bien para mí
Michael Pacheco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.