grep para extrair apenas algumas palavras

2

Eu tenho um grande relatório com muitos endereços IP exibidos em linhas aleatórias. Todo o endereço IP começa com 192.168. Gostaria de extrair apenas os endereços IP e obter um relatório semelhante a:

192.anything.anything.anything

192.xx.xx.xx

192.xx.xx.xx

E mais nada. Eu tentei cat filename | grep -w 192 que parece ter toda a linha. Eu só quero o endereço IP completo. Agradeço qualquer informação que você possa compartilhar comigo.

    
por tester787 13.08.2015 / 20:56

4 respostas

7

Eu faço isso com egrep -o ou grep -E -o

O sinalizador -E no grep ativa o regex (que é o que o egrep faz por padrão), e o sinalizador -o imprime somente a string correspondente.

grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /path/to/log
192.168.1.11
    
por 13.08.2015 / 21:40
3
grep -o '192.168.[0-9.]*' datfile | sort -u

Pode não ser portável para versões antigas de grep , mas -o parece estar no GNU e no * BSD grep , então ... (também não é uma combinação perfeita em um endereço IP, mas fazendo o número apropriado varia com regex é super chato.)

    
por 13.08.2015 / 21:40
1
sed -n 's/.*\(192.168.[^ ]*\).*//p' filename

deve fazer o truque. \> indica o fim da palavra.

    
por 13.08.2015 / 21:32
0

Como todos os endereços IP começam com 192.168. , você pode fazer:

grep -o '192\.168\.[^ ]\+' file.txt

Por exemplo:

$ grep -o '192\.168\.[^ ]\+' bar.txt 
192.168.5.4
192.168.1.2
    
por 13.08.2015 / 22:28

Tags