Substituição de texto com campos específicos em um arquivo de log.

0

Eu tenho isso:

00:05:40.005 id=32214483 Src=PIPE <[email protected]> (received) [email protected] relayed (1234 bytes)

Eu preciso conseguir isso:

00:05:40.005 id=32214483 [email protected] <[email protected]> (received) [email protected] relayed (1234 bytes)

NOTA - Não posso trocar os dados "por coluna" e aplicá-los ao arquivo inteiro, pois tenho outros dados no arquivo que possuem o formato correto de que preciso. Eu simplesmente desejo trocar todas as instâncias de Src = PIPE com os dados na próxima coluna sem o < > símbolos.

    
por user53029 23.11.2016 / 17:02

2 respostas

1

Eu acredito que o perl one liner fará o que você quiser:

perl -i.bak -pe 's/Src=PIPE\s+<(\w+?@\w+?\.\w+?)>\s+?/Src=$1 <$1> /;' [file(s)]

Outra forma de verificar se o elemento nos colchetes angulares é um endereço de e-mail:

perl -i.bak -pe 's/Src=PIPE\s+<(.*?)>\s+?/Src=$1 <$1> /;' [file(s)]

O -i.bak faz um backup de cada um dos arquivos processados na linha de comando.

    
por 23.11.2016 / 17:41
1

Verifique isto:

$ sed 's/PIPE <\(.*\)>/ <>/g' -i file.txt
    
por 23.11.2016 / 21:31