我的原文是
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