Como remover linhas contendo endereço IP? [fechadas]

4

Eu tenho um arquivo como:

http://example.mx
https://test.com
http://4.3.4.4
http://dev.somedomain.com
http://1.3.4.2

Eu quero me livrar daqueles com IPs para que o resultado seja:

http://example.mx
https://test.com
http://dev.somedomain.com

O que eu fiz é:

cat  in.log |  sed  '/^http:\/\/[0-9]/d'  > out.log

Mas isso não funciona.

    
por supermario 25.12.2016 / 11:51

4 respostas

7

Mas o funciona . A resposta correta parece já estar na sua pergunta.

$ cat in.log
http://example.mx
https://test.com
http://4.3.4.4
http://dev.somedomain.com
http://1.3.4.2
$ cat  in.log |  sed  '/^http:\/\/[0-9]/d'  > out.log
$ cat out.log
http://example.mx
https://test.com
http://dev.somedomain.com
$
    
por 25.12.2016 / 11:55
2

Se você quiser remover as linhas de in.log , use o sinal -i de sed :

sed -i '/^http:\/\/[0-9]/d' in.log
    
por 25.12.2016 / 11:56
2

isso já funciona, no entanto /^http:\/\/[0-9]/ corresponderá a

http://1.hello.word 

para corresponder ao uso "IP completo" /^http:\/\/[0-9\.]*$/

onde

  • [0-9\.] corresponde ao dígito e ponto ...
  • * ... 0 ou mais tempo ..
  • $ ... até o final da linha.
por 25.12.2016 / 12:01
2

Parece que você deseja remover linhas da sua entrada. Além de sed , há uma solução muito simples usando grep -v :

grep -v 'http://\([0-9]\+\.\)\{3\}[0-9]\+' in.log

Além disso, não há necessidade de cat e do pipe aqui: a cat foo | bar pode ser substituída por bar < foo em geral, e nessa instância específica você pode passar o nome do arquivo como um argumento para grep ou sed sem a necessidade do tubo.

Os puristas da Shell geralmente desaprovam esse uso de cat porque ele está iniciando desnecessariamente um processo separado (e porque o objetivo do cat é usar arquivos cat enate…).

    
por 25.12.2016 / 14:06