Como alimentar os resultados do comando date no grep para filtrar os resultados de outro comando

3

Eu preciso usar o resultado de um comando de data formatada (date + "% m /% d") como o filtro grep para filtrar os resultados de outro comando que exibirá alertas em um sistema para que eu veja apenas alertas de o dia dado.

Digamos que alertcommand forneça a leitura de alerta no console. Eu sei que posso fazer alertcommand | grep 8/10 para obter os logs a partir de hoje, mas eu quero ser capaz de alimentar date +"%m/%d" para que eu não precise especificar a data toda vez que eu executar, mas não posso descobrir como vinculá-lo em um único comando (de preferência sem ter que criar arquivos temporários ou qualquer coisa, pois isso será executado no hardware do cliente).

Eu olhei para esta pergunta era semelhante , mas não conseguia descobrir como fazer funcionar da mesma maneira.

    
por MaQleod 10.08.2011 / 23:02

3 respostas

5

No bash, use apenas algo como alertcommand | grep $(date +"%m/%d")

$() executa um comando em uma subshell e retorna a saída do comando como string. Alternativamente, você pode colocar o comando com backticks para o mesmo efeito.

    
por 10.08.2011 / 23:08
2

Você poderia simplesmente atribuir a saída do comando date a outra variável e usá-la como argumento:

myDateVariable='date +"%m/%d"'
alertcommand | grep $myDateVariable

Dessa forma, você pode reutilizar o valor de data no futuro e também depurar quaisquer etapas intermediárias

    
por 10.08.2011 / 23:13
0

No shell csh do FreeBSD eu não posso usar os dois métodos.

1)

cat /var/log/exim/mainlog | grep $(date +%Y-%m-%d)
Illegal variable name.

2)

d='date +%Y-%m-%d';cat /var/log/exim/mainlog|grep $d
d=2011-11-13: Command not found.

Mas eu posso usar o código diretamente backticked assim:

cat /var/log/exim/mainlog | grep 'date +%Y-%m-%d'
    
por 13.11.2011 / 20:39