Isso pode ser feito simplesmente com um único comando awk
:
awk '$5 ~ /^sshd/ && $6 == "Connection"' log.txt
Agora eu tenho isso:
while read p ; do
if ("$p | awk 'print $5'") == "sshd" && ("$p | awk 'print $6'") == "Connection";do
echo("$p")
done
done < /log.txt
e o texto que eu quero detectar é "sshd" logo antes de um "[" e "Connection" após a string ":".
a linha de registros se parece com isso:
Sep 21 05:45:55 MY_MACHINE sshd[16251]: Connection from 76.127.218.159 port 41950
Você pode usar apenas awk
:
awk '$5 ~ /^sshd\[\[0-9]+\]:$/ && $6 ~ /^Connection$/{print}' /log.txt