Meu primeiro instinto é isolar a parte do usuário (usando grep -o
). A coisa boa sobre isso é que tem alguma marcação (relativamente) única - os colchetes.
Assim, o grep abaixo isola os (dois) campos que possuem colchetes ao redor deles, então retira o primeiro campo (ID do processo) e retira o colchete do que resta (campo do usuário)
< vsftp.log grep -o '\[[^]]*\] *\[[^]]*\]' | sed -e 's/\[[^]]*\] *//' -e 's/\[\(.*\)\]//'
Se você puder garantir que não haja espaços no nome do usuário, poderá aproveitar e simplificar um pouco as coisas. Encontre o campo entre colchetes sem espaços (o campo pid teria eles) e então faça o corte.
< vsftp.log grep -o '\[[^] ]*\]' | sed -e 's/\[\(.*\)\]//'
Funciona, mas pode não ser o ideal.