teat corresponde a word1 e word2 para obter uma palavra entre

2

Estou tendo problemas em tentar extrair um endereço IP de uma chamada de arquivo de log completa.

Isto é o que a linha no arquivo parece

[2016-11-10 11:22:42] NOTICE[24518] chan_sip.c: Registration from '"100" ' failed for '62.210.189.39:6584' - Wrong password

Eu só preciso do endereço IP entre ' e :

Abaixo está minha tentativa e obtendo isso para extrair o ip

sed -e "/failed[[:space:]]for[[:space:]]'*.*.*.*:*'/,/[[:space:]]-[[:space:]]Wrong[[:space:]]Password/p" full > output.txt
    
por john 17.11.2016 / 21:53

2 respostas

0

Uma solução muito básica usando cut

cut -d \' -f 4 < full | cut -d : -f 1 > output.txt
62.210.189.39

Você pode precisar filtrá-lo para apenas Wrong Password linhas, então aqui está algo com isso também.

grep 'Wrong Password' full | cut -d \' -f 4 |cut -d : -f 1 > output.txt

Aqui está uma versão um pouco mais complexa usando sed

sed -e "s/.*failed for '\([0-9\.]*\):.*//" full > output.txt

Use o agrupamento para extrair o endereço IP nos parêntesis

E apenas por diversão eu fiz um com perl

perl -n -e "/failed for '([\d.]+):/ && print \ . \"\n\"" full > output.txt

Também aqui está um comando grep dos comentários sobre a pergunta que funcionou para mim.

grep -oP '(\d{1,3}\.{1})+\d{1,3}' full > output.txt
    
por 17.11.2016 / 22:02
0

Você diz:

I just need the ip address between ' and :

Portanto, vamos usar esses caracteres como delimitadores de campo e selecionar o endereço IP:

$ awk -F "[':]" '{ print $7 }' file
62.210.189.39

Se você deseja restringir a saída a linhas contendo, por exemplo, a string Wrong password :

$ awk -F "[':]" '/Wrong password/ { print $7 }' file

Ao dividir a linha em ' e : como delimitadores de campo, você acaba com os seguintes campos:

[2016-11-10 11:22:42] NOTICE[24518] chan_sip.c: Registration from '"100" ' failed for '62.210.189.39:6584' - Wrong password
^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^
field1         f2 field3                       field4              field5 field6       field7        f8   field9
    
por 19.09.2017 / 19:50