grep com variável

0

Eu estou tentando criar um script para monitorar todos os logins usando sudo, sucesso e falha.

Neste momento, tenho:

set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts

cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log

Como posso grep a data atual de / var / log / secure, então eu só recebo entradas a partir do dia em que elas ocorreram?

Quando eu corro

cat /var/log/secure | grep 'Mar 18' | grep 'servername su'

da linha de comando, eu obtenho os resultados que preciso, mas não sei como escrever o script para grep com a data atual, definida como a variável $ tdate.

    
por cmorris14 18.03.2015 / 21:57

2 respostas

2

Você tem que citar o argumento para grep: grep "$tdate" . Isto é porque $tdate se expande para duas palavras separadas por espaços em branco, que em por sua vez, é passado para o grep como dois argumentos, a menos que as aspas duplas sejam adicionadas.

Seu script pode ser melhorado para remover o uso inútil de gato e chamar grep apenas uma vez:

</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"
    
por 18.03.2015 / 22:02
1

tdate tem um espaço lá. Então, grep trata a segunda parte de tdate como um nome de arquivo. Você precisará colocar $tdate entre aspas duplas para evitar isso. Seu comando deve se parecer com:

cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log
    
por 18.03.2015 / 22:06

Tags