我有一个这种格式的mac地址列表:
412010000018
412010000026
412010000034
我想要这个输出:
41:20:10:00:00:18
41:20:10:00:00:26
41:20:10:00:00:34
我尝试了这个,但没有奏效:
sed 's/([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1:\2:\3:\4/g' mac_list
我该怎么做?
答案 0 :(得分:6)
这可能适合你(GNU sed):
sed 's/..\B/&:/g' file
答案 1 :(得分:4)
这对我有用
sed 's/\(..\)/\1:/g;s/:$//' file
答案 2 :(得分:3)
您必须使用正确的sed
语法:
\{I\}
matches exactly I sequences (I is a decimal integer;
for portability, keep it between 0 and 255 inclusive).
\(REGEXP\)
Groups the inner REGEXP as a whole, this is used for back references.
这是一个涵盖前两个字段的示例命令
sed 's/^\([0-9A-Fa-f]\{2\}\)\([0-9A-Fa-f]\{2\}\).*$/\1:\2:/'
以下命令可以处理完整的MAC地址并且易于阅读:
sed -e 's/^\([0-9A-Fa-f]\{2\}\)/\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1/'
根据@Qtax发布的perl解决方案的想法,可以获得更短的解决方案:
sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
答案 3 :(得分:2)
Perl示例:
perl -pe 's/(\b|\G)[\da-f]{2}(?=[\da-f]{2})/$&:/ig' file
如果文件只有MAC地址,可以简化为:
perl -pe 's/\w{2}\B/$&:/g' file
答案 4 :(得分:1)
如果awk
是可接受的解决方案:
awk 'BEGIN { FS= "" }
{ for (i=1; i<=length($0) ; i++) {
if (i % 2 == 0) { macaddr=macaddr $i ":" }
else { macaddr = macaddr $i }
}
print gensub(":$","","g",macaddr)
macaddr=""
}' INPUTFILE