原输出的含MAC地址的结果为:
STRING: 0:de:fb:d8:b:d2
客户要求把MAC中只有1位的,前面要补0,变为
STRING: 00:de:fb:d8:0b:d2
还要求写成通用的方式。
Shell 正则表达式有2中方式
1. 直接补0
$ echo 'STRING: 0:d:f:d:b:d'| sed 's/\(:\|\s\)\([0-9a-f]\)\(:\|$\)/\10\2\3/g' | sed 's/\(:\|\s\)\([0-9a-f]\)\(:\|$\)/\10\2\3/g'
STRING: 00:0d:0f:0d:0b:0d
2. 先加0,然后把有3位的去掉前面的0
$ echo 'STRING: 0:f:f:d:b:d' | sed "s/\(:\|\s\)\([a-f0-9]\+\)/\10\2/g" | sed "s/0\([a-f0-9]\{2\}\)/\1/g"
STRING: 00:0f:0f:0d:0b:0d
Perl正则表达式比较简单
[root@ispimos ~]# echo 'STRING: 0:f:f:d:b:d' | perl -pe "s/(?<=:|\s)([a-f0-9A-F])(?=:|$)/0\1/g"
STRING: 00:0f:0f:0d:0b:0d