Eu posso estar entendendo mal a questão, mas há uma razão pela qual você não pode usar isso?
tail -f /location/of/thefile | grep -i -E "foo|bar"
Existe /location/of/thefile
, que é um arquivo de log em constante mudança. A densidade média de atualizações é de 4 por minuto, a taxa de atualização máxima possível pode ser de 30 a 40 por minuto. Cada atualização adiciona 2-5 linhas (média), mas pode ser centenas em casos extremos. Cada linha começa com um timestamp [YYYY-MM-DD HH:MM:SS]
seguido por texto simples (100-200, no máximo algumas centenas de caracteres).
Minha tarefa é construir um comando simples que monitore continuamente esse arquivo de log e envie para o stdout todas as linhas que contiverem as sequências alfabéticas foo
OR bar
. Antes e depois dessas (sub) strings, pode haver qualquer caractere ( \n
somente após a (sub) string, é claro), mesmo %code%
. A capitalização das palavras poderia ser todas as variações possíveis.
Bem, minhas ideias para a solução sempre contêm syscalls para o tempo, mas eu não deveria usá-las. Por favor, construa um comando simples . Muito obrigado!
Eu posso estar entendendo mal a questão, mas há uma razão pela qual você não pode usar isso?
tail -f /location/of/thefile | grep -i -E "foo|bar"
use o pipe nomeado assim:
arquivo para ler continuamente: logfile.txt
código: (diga readfile.sh) enquanto lê a linha Faz linha echo $ feito < mypipe
No shell:
mkfifo mypipe ./readfile.sh this will block (will not exit)
No shell anular, vá para o mesmo diretório.
tail -f logfile.txt >> mypipe & this will go to back ground
Feito. o que quer que continue entrando no logfile.txt será impresso via readfile.sh que não saiu.
Tags command-line logs tail watch