Linux
linux命令以不同方式處理模式之前和之後的部分行
我的原文是
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
那麼我會將-
(連字元)設置為欄位分隔符awk
並執行sed 's/../&:/g;s/:$//'
on$2
,然後使用 列印整行print $0
。
試試這個,
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
假設最後的十六進制數總是八個字元:
$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file 11 2 CDTZ - b0:02:64:ab 36 37 CDTB - c2:33:00:01