Вам просто нужно соответствовать средней части, где у вас есть 2 цифры, за которыми следует :
, а затем точно 6 цифр. Если вы фиксируете текст в отдельных группах надлежащим образом, вы можете перемещать их в своем результате. Обратите внимание, что граница слова \b
в конце шаблона должна гарантировать, что мы сопоставляем ровно 6 цифр и не сопоставляем строки, которые имеют полные 7 цифр:
/\b(\d)(\d):(\d{6})\b/0\1:\2\3/
|__________________| |______|
pattern replacement
Это дает ожидаемый вывод. Вы можете поэкспериментировать с ним онлайн здесь
sed
не имеет спецификаторов стиля Perl, таких как \d
. Вместо этого вам нужно будет использовать [[:digit:]]
. Вот обновленное регулярное выражение, которое работает с sed
sed -E 's/\b([[:digit:]])([[:digit:]]):([[:digit:]]{6})\b/0\1:\2\3/g' myfile.txt
Как отметил @Jonathan Leffler, \b
не работает с Ma c 'sed
, поэтому вам вместо этого нужно будет добавьте запятые в шаблон регулярных выражений спереди и сзади, а затем замените их обратно в шаблоне замены