faça isso com um sedelinerante:
sed -n -s -r '1,/REMOVE/ { s/.*(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}).*//p }' *.txt
explicação:
-
-n
faz com que sed não imprima linhas, a menos que seja explicitamente informado usando o comandop
. -
-s
faz o sed manipular cada arquivo separadamente, em vez de combinar todos os arquivos em um fluxo. -
-r
faz com que o sed use a sintaxe de regex estendida, que precisa de menos escape.
observe que -s
e -r
são extensão do gnu para sed. Se você não sabe o que significa extensão gnu, então provavelmente você está usando o gnu sed. Se você não estiver usando um gnu sed, então você tem que contornar os recursos que faltam.
mais explicações:
- o script sed
1,/REMOVE/ { commands }
significa executar os comandos dentro das chaves desde a primeira linha da entrada até a linha contendoREMOVE
. - o script sed
s/pattern/replacement/p
significa pesquisar por padrão, substituir por substituição e depois imprimir essa substituição. - o padrão
.*(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}).*
é um padrão que reconhece todas as linhas que contêm uma cadeia de quatro números de três dígitos separados por pontos. Ele também captura a cadeia em um grupo chamado. - a referência de retorno
faz referência ao primeiro dos grupos capturados. isso significa, na verdade, descartar o restante da linha e imprimir apenas o endereço IP.
leia o manual de segurança para maiores explicações. veja também o bom tutorial sed .