Eu gostaria de seguir um arquivo, mas apenas as linhas de saída que contêm uma determinada string. Isso é possível?
11
use grep. É construído apenas para esse fim.
Para encontrar linhas a partir de um final de / var / log / syslog com "cron", basta executar:
tail -f /var/log/syslog | grep cron
E como ele aceita qualquer coisa sobre stdin, você também pode usá-lo na saída de qualquer outro comando, canalizando da mesma maneira que acima (usando o símbolo |).
grep
o buffer será armazenado quando usado de maneira não interativa, como quando faz parte de um pipeline mais longo. O GNU grep 2.5.1 oferece a--line-buffered
opção de contornar isso ao eliminar o grep do pipeline não é uma opção. (Quando eu digo grep vai tamponar Quer dizer que você não vai ver uma saída até que o buffer atingiu algo como 4k.)Espero que ajude.
fonte
Aqui estão algumas outras idéias que, embora não sejam tão simples, podem oferecer alguma flexibilidade adicional interessante:
Primeiro, você pode filtrar com awk em vez de grep:
que funciona exatamente da mesma forma que o exemplo usando
grep
. Você pode expandir isso usando o poder do awk, por exemplo:que imprimirá o sexto até o último campo da saída (os campos são separados por espaço em branco)
Outra idéia semelhante é usar um liner perl:
isso funciona exatamente como
grep
. Talvez você queira um contador de números de linha e apenas o sexto campo? Que tal agora:Obviamente, todo esse tipo de coisa também pode ser feito com outras ferramentas, mas eu queria ilustrar que existem algumas maneiras divertidas de usar linguagens de propósito geral, como awk ou perl aqui.
fonte
Outro truque digno de nota, se você tiver um arquivo CSV com cabeçalhos que deseja omitir, por exemplo:
Não importa quanto tempo a entrada
tail
seja,+n -2
ela omitirá a primeira linha.fonte