
Мой оригинальный текст
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
Я хочу, чтобы выводимый текст выглядел так:
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
Мне нужно добавить двоеточие после каждых двух символов в строке, следующей за дефисом.
Есть ли какая-то общая команда обработки текста, которой я могу дать указание
- Все строки до дефиса (и включая его) должны быть нетронутыми.
- Вставляйте двоеточие после каждых двух символов, следующих за дефисом.
В общем случае мне приходится обрабатывать текст до и после шаблона (в данном случае дефиса) по-разному.
Мои усилия на данный момент:
- У меня есть базовые знания
sed
иawk
. - Если бы был способ сделать это
sed
внутри ,awk
то я бы установил-
(дефис) в качестве разделителя полейawk
и выполнил быsed 's/../&:/g;s/:$//'
on$2
, а затем вывел бы всю строку с помощьюprint $0
.
решение1
Попробуй это,
awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
gsub(/../,"&:",$NF)
добавит завершающий символ:
к каждой паре или символу.sub(/:$/,"",$NF)
удалит ненужное:
в конце последнего поля, которое было добавлено предыдущимgsub
решение2
Предположим, что шестнадцатеричное число в конце всегда состоит из восьми символов:
$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01