Это может работать для вас (GNU sed):
sed -E 's/\[Span:([0-9]*)([^0-9]*)([0-9]*)[^]]*[]]/\1.\n\3\2/;:a;/\n[0-9]{3}/!s/\n/&0/;ta;s/\n//' file
Используйте сопоставление с образцом и обратные ссылки для достижения желаемого результата.
Не забывая обнулить десятичную часть соответствия, используя цикл и введенную новую строку, которая по завершении удаляется.
Первая команда замещения фокусируется на такой строке, как [Span:5ms64us]
и если найдены группы 5
в обратной ссылке 1, ms
в обратной ссылке 2 и 64
в обратной ссылке 3. Они преобразуются в \1.\n\3\2
, то есть 5.\n64ms
, а остальная часть исходной строки удаляется.
Вторая часть сценария sed обнуляет десятичную часть обратной ссылки 3 длиной 3 цифры с ведущими нулями.Используя \n
в качестве маркера, если числовые цифры, следующие за \n
, имеют длину менее 3, к \n
добавляется 0
и проверка повторяется.После того, как проверка прошла, т. Е. Есть 3 цифры, \n
удаляется и обработка завершается.