$ echo "Oct 24 10:18:43 reliant3 sshd[67299]: Accepted password for root from 10.51.21.57 port 60097 ss" | sed 's/.*\[\(.*\)\].*//'
67299
(descartar tudo, par o que está entre parênteses).
Oct 24 10:18:43 reliant3 sshd[67299]: Accepted password for root from 10.51.21.57 port 60097 ssh2
Estou procurando pela palavra senha. Quando o encontrar, quero encontrar algo associado ao número sshd[67299]
e imprimi-lo.
$ echo "Oct 24 10:18:43 reliant3 sshd[67299]: Accepted password for root from 10.51.21.57 port 60097 ss" | sed 's/.*\[\(.*\)\].*//'
67299
(descartar tudo, par o que está entre parênteses).
Isso deve funcionar para você
grep password my_log.txt | sed 's/.*sshd\[\(.*\)\].*//'
grep password my_log.txt
obtém todas as linhas com senha.
sed 's/.*sshd\[\(.*\)\].*//'
encontra o []
após sshd
e obtém o PID dentro dele.
Você não especificou isso em sua pergunta, mas também pode canalizar isso para sort -u
para filtrar duplicatas.
Embora menos legível, na minha opinião, você também poderia fazer tudo em uma linha sed
.
sed -e '/password/!d;s/.*sshd\[\(.*\)\].*//' my_log.txt
Tags text-processing