You said it only works with one column with timestamps, but as RudiC said, your code only works if there is only one column with timestamps and that timestamp is at the end of the line. RudiC's code works for one timestamp anywhere on a line except at the end of a line (and won't work if you have tabs as field separators instead of spaces).
As long as you have a version of sed that conforms to the standards, the following should work no matter how many timestamps you have on a line, no matter where they are placed on a line, and no matter what field separators you use:
sed 's/\([0-2][0-9]:[0-5][0-9]:\)[0-9][0-9]/\100/g' file
@Don Cragun - You are right. RudiC's solution did not work. I'm running on AIX 6 ksh.
Your solution worked great. In your solution, the one within () would remain be unchanged by sed? instead only the latter part replaced? also what does \1 (before 00) do?
Given the spacing between fields in the sample input, I was guessing that tabs could have been converted to spaces in the copy and paste process. redder will have to let us know whether the real data has spaces, tabs, or a mix.
I chose a BRE that would work either way.
To expand on what MadeInGermany said: \digit expands to the string that was matched by the BRE between the \( and the matching \) where the digit (1 through 9) refers to the 1st through the 9th \( to indicate which matched expression is to be included in the replacement text. In the expression I gave, \1 expands to HH:MM: from the matched timestamp. So \100 expands to the matched hours and minutes with the seconds replaced by 00 .