remove os registros com um número de porta específico de um arquivo de log

1

Eu tenho um arquivo de log, mas eu quero remover os dados específicos da porta do arquivo de log

O número da porta é 22696 .
Exemplo de registro de log assim:

  87.14.101.122   22696   2018-01-10 01:12:30 +0000       CONNECT gsp10-ssl.apple.com:443 HTTP/1.1        200     0       locationd/2236.0.11 CFNetwork/889.9 Darwin/17.2.0
    
por Ramadevi Palagani 26.01.2018 / 12:44

3 respostas

3

Tente usar awk :

awk '$2 !~ /^22696$/' file

Este comando verifica o segundo campo ( $2 ; espaços como delimitador por padrão) para correspondência exata ( /22696/ ) da posição inicial ( ^ ) até a posição final ( $ ) e resultado invertido ( ! ).

Ou mais simples (obrigado RomanPerekhrest ):

awk '$2!=22696' file

Para editar com segurança seu arquivo de log que pode ser grande, tente usar este conjunto de comandos:

mv file{,.backup} && awk '$2!=22696' file.backup > file

Depois disso, você pode precisar alterar as permissões de arquivo com chmod .

    
por 26.01.2018 / 12:56
0

Usando grep , você definiria um padrão para essas linhas e inverteria a seleção com a opção -v :

grep -v '^ *[^ ]* *22696 ' file
    
por 26.01.2018 / 13:44
0

Basta usar o comando abaixo para obter o mesmo

Inputfile == > Consiste em 2 linhas de uma linha com entrada 22696 e outra linha com entrada 22697.

O objetivo é remover a linha que consiste em 22696

Inputfile

 87.14.101.122   22696   2018-01-10 01:12:30 +0000       CONNECT gsp10-ssl.apple.com:443 HTTP/1.1        200     0       locationd/2236.0.11 CFNetwork/889.9 Darwin/17.2.0
 87.14.101.122   22697   2018-01-10 01:12:30 +0000       CONNECT gsp10-ssl.apple.com:443 HTTP/1.1        200     0       locationd/2236.0.11 CFNetwork/889.9 Darwin/17.2.0

Comando

sed -i '/22696/d' Inputfile

Saída

87.14.101.122   22697   2018-01-10 01:12:30 +0000       CONNECT gsp10-ssl.apple.com:443 HTTP/1.1        200     0       locationd/2236.0.11 CFNetwork/889.9 Darwin/17.2.0
    
por 26.01.2018 / 16:44