sed abordagem:
sed -n 's/.* Agent Identifier: \(.*\) Socket IP: \(.*\)/ /p' inputfile > host_list.txt
host_list.txt conteúdo do arquivo ( cat host_list.txt
):
SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4
Estou tentando aprender a analisar arquivos usando os comandos e ferramentas do Linux. Estou sempre confuso sobre como aproveitar melhor o grep / awk / sed.
Aqui está um caso de uso específico.
Eu tenho um arquivo de log que contém as seguintes strings:
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV3 Socket IP: 192.168.2.6
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV4 Socket IP: 10.1.2.3
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV1 Socket IP: 192.168.2.15
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV2 Socket IP: 10.1.2.4
Meu objetivo é extrair o nome do host que aparece após "Identificador do agente" e o endereço IP associado para cada linha e exportá-los para um arquivo txt. Qual seria a melhor maneira de fazer isso?
Basta fazer isso:
$ cat file.log | awk '{ print $16, $19 }'
E ele retornará uma lista como esta:
SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4
Você pode redirecionar a saída para qualquer lugar que desejar, por exemplo, apenas adicione:
> hosts.text
para enviar seus dados para um arquivo chamado hosts.txt
O texto acima irá invalidar (substituir) qualquer conteúdo no arquivo hosts.txt . Se você quiser anexar seus dados ao final do arquivo, use >>
em vez de >
.