
我的原文是
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
我希望輸出文字顯示為
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
我必須在連字號後面的字串每 2 個字元後添加一個冒號。
是否有任何常見的文本處理命令可以指示
- 連字符之前(包括連字符)的所有字串都應保持不變。
- 在連字號後面每 2 個字元後插入冒號。
一般來說,我必須以不同的方式處理模式(這裡的連字符)之前和之後的文字。
到目前為止我的努力:
sed
我有和的基本知識awk
。- 如果有辦法
sed
在 an 內部執行操作,awk
那麼我會將-
(連字符) 設為字段分隔符號 inawk
並執行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