Combinar cola -f con grep?

26

Hola, quiero seguir buscando un archivo de registro, pero tampoco quiero ver cosas irrelevantes, solo estoy interesado en cualquier cosa que contenga "foobar".

Entonces, si estuviera siguiendo el archivo, lo haría

 tail file | grep "foobar"

Ahora que estoy agregando la opción -f, ¿hay alguna manera de mostrar de alguna manera las cosas que quiero? usando grep u otra técnica?

user893730
fuente
1
Parece que su respuesta ya está escrita aquí: stackoverflow.com/questions/5427483/…
uSlackr
1
Parece que la respuesta xyr está en la pregunta.
JdeBP

Respuestas:

41

Casi escribiste la respuesta, que es:

tail -f file.log | grep "foobar"

Eso es.

Ravachol
fuente
1
Woah, tienes razón, creo que no esperaba que esto funcionara, todavía no lo hago, ¿no se supone que las tuberías sucederán cuando un comando haya terminado la ejecución? Supongo que esto muestra que no, sucede cada vez que hay una salida, ¿verdad?
user893730
3
No, lanzará los dos programas en paralelo, y el segundo (grep) saldrá tan pronto como se cierre STDOUT de tail. Ese es el objetivo de las tuberías, la transmisión de datos :)
Ravachol
44
Cuando grepes la última línea en la tubería, su salida está almacenada en línea, por lo que puede ver la salida filtrada de en tail -fvivo, en lugar de diferida. Tenga en cuenta que si tuviera que usar varios grepcomandos, cualquiera de los que se canalizara su salida necesitaría una --line-bufferedopción (suponiendo grep GNU o BSD) para mantener este comportamiento.
ghoti