Usando awk com ajuda de date :
awk -F '[[\]]' '{cmd="date -d \""$2"\" \"+%F %T\""; cmd | getline out; print out $3}'
-
-F '[[\]]'define o delimitador de campo como[ou], portanto, a data estaria no campo 2 e o restante no campo 3 -
A variável
cmdcontém o comandodatepara converter o segundo campo no formato desejado,getlineexecuta o comandodateexterno e a saída é salva na variávelout -
Finalmente, o conteúdo da variável
oute o terceiro campo são impressos
Exemplo:
% cat file.txt
[Sat Sep 10 06:31:41 2016]!Node2!Node1!Node3
[Sun Sep 11 23:31:41 2016]!Node2!Node1!Node3
% awk -F '[[\]]' '{cmd="date -d \""$2"\" \"+%F %T\""; cmd | getline out; print out $3}' file.txt
2016-09-10 06:31:41!Node2!Node1!Node3
2016-09-11 23:31:41!Node2!Node1!Node3