Alterar formato de data e anexar ao arquivo original

0

Eu tenho um arquivo assim chamado a.txt:

[2016-03-30T04:51:51.599-04:00]!ER_DEV!Port_Conflict!/u05/app/
[2016-01-20T04:30:21.885-04:00]!ER_DEV!Port_Conflict!/u05/app/

Eu preciso modificá-lo para que pareça:

  2016-03-30 04:51:51!ER_DEV!Port_Conflict!/u05/app/
  2016-01-20 04:30:21!ER_DEV!Port_Conflict!/u05/app/

eu já escrevi um comando para alterar [2016-03-30T04: 51: 51.599-04: 00] para 2016-03-30 04:51:51 .mas como anexar a saída da consulta ao arquivo original.

  awk -F'!' '{print $1}' a.txt | awk -F '[T.]' '{print $1 " " $2}' | awk '{gsub(/\[/,"")}1' 
    
por Naresh 16.09.2016 / 20:51

2 respostas

4

Depende de quão rigoroso você deseja estar com a correspondência de padrões. Se você não está muito preocupado com "dados maliciosos", então um simples-ish sed

sed 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/ /'

Se você tiver uma versão de sed que saiba sobre o -i flag, poderá fazer uma atualização in-loco do arquivo

sed -i 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/ /' a.txt
    
por 16.09.2016 / 21:23
3

Fácil com sed

sed '
    s/T/ /      #exchange "T" by "space"
    s/\[/ /     #exchange "[" by "space"
    s/\..*\]//  #remove from "." till "]" included
    ' a.txt

Mas se você preferir awk

awk -F'[][]' '
    {
        split($2, a,"[T.]")
        $2=a[1]
        $3=a[2] $3
        print
    }
    ' a.txt
    
por 16.09.2016 / 21:19