Me gustaría seguir un archivo, pero solo las líneas de salida que tienen una cadena determinada. es posible?
11
usa grep. Está construido solo para ese propósito.
Para buscar líneas de una cola de / var / log / syslog que tengan "cron" en ellas, simplemente ejecute:
tail -f /var/log/syslog | grep cron
Y dado que acepta cualquier cosa sobre stdin, también puede usarlo en la salida de cualquier otro comando, canalizando de la misma manera que antes (usando el símbolo |).
grep
se amortiguará cuando se use de forma no interactiva, como cuando es parte de una tubería más larga. GNU grep 2.5.1 ofrece la--line-buffered
opción de evitar esto cuando eliminar grep de la tubería no es una opción. (Cuando digo que grep almacenará en búfer, quiero decir que no verá salida hasta que el búfer haya alcanzado algo así como 4k.)Espero que ayude.
fuente
Aquí hay otras ideas que, aunque no son tan simples, pueden ofrecer una flexibilidad adicional interesante:
Primero, puede filtrar con awk en lugar de grep:
eso funciona exactamente igual que el ejemplo usando
grep
. Puede ampliar esto utilizando el poder de awk, por ejemplo:que imprimirá del sexto al último campo de la salida (los campos están separados por espacios en blanco)
Otra idea similar es usar un perl one-liner:
eso funciona exactamente igual
grep
. ¿Quizás quieres un contador de número de línea y solo el sexto campo? Qué tal esto:Obviamente, todo este tipo de cosas también se puede hacer con otras herramientas, pero quería ilustrar que hay algunas formas divertidas de usar lenguajes de propósito más general como awk o perl aquí.
fuente
Otro truco que vale la pena señalar, si tiene un archivo CSV con encabezados que desea omitir, por ejemplo:
No importa cuánto tiempo sea la entrada
tail
,+n -2
omitirá la primera línea.fuente