Eu usaria perl
aqui:
perl -pe 's{\b(\d{1,2})(:\d\d:\d\d) ([AP])M\b}{
$1 + 12 * (($3 eq "P") - ($1 == 12)) . $2}ge'
Isso é adicionar 12 à parte da hora se PM (exceto 12PM) e mudar 12AM para 0.
Com awk
, não fazendo a parte com limite de palavras (portanto, poderia dar falsos positivos em 123:21:99 AMERICA
, por exemplo) e assumindo que há apenas uma ocorrência por linha:
awk '
match($0, /[0-9]{1,2}:[0-9]{2}:[0-9]{2} [AP]M/) {
split(substr($0, RSTART, RLENGTH), parts, /[: ]/)
if (parts[4] == "PM" && parts[1] != 12) parts[1] += 12
if (parts[4] == "AM" && parts[1] == 12) parts[1] = 0
$0 = substr($0, 1, RSTART - 1) \
parts[1] ":" parts[2] ":" parts[3] \
substr($0, RSTART + RLENGTH)
}
{print}'