shell补齐mac地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell补齐mac地址相关的知识,希望对你有一定的参考价值。

我有个文件,格式如下:
0:10:f3:10:a:36 192.168.1.151
我想将第一列的mac地址的格式改成00:10:f3:10:0a:36
也就是只有一位的前面就加上个0,怎么弄呢?

假设你的文件叫 file.txt。
sed 's/^[a-fA-F0-9]:/0&/g;s/:\([a-fA-F0-9]:\)/:0\1/g' file.txt
或者:
awk 'print $1' file.txt | awk -F: 'for(i=1;i<NF;i++)printf("%02s:",$i);printf("%02s",$NF)'追问

你很厉害!再问你一个问题,我想把文件中的0换成00,我用的gsub,但是这样子20就变成200了,怎么办呢?我只想把0替换了

追答

20 变为 200 是正确的啊,你的确是只把0替换成00了,2 还在啊。
你的需求是。。。? 你的gsub 怎么写的?

追问

我想把数值为0的变成00,数值为20的不变,我写的是awk 'gsub(/0/,"00");print' file11.txt

追答

0:10:f3:10:a:36 192.168.1.151
对这个例子,a 前面不用加 0,是要把 0 变为 00 ?
变为这样:00:10:f3:10:a:36 192.168.1.151
对不?

追问

不是,我的文件现在是这个样子:
192.168.1.20.0:10:f3:10:0a:36
另一个文件是
192.168.1.20.00:10:f3:10:0a:36
我想让这两个文件变成一样的,也就是把上面那个文件的0变成00,但是这样子20就变成200了,怎么解决?

追答

用正则表达式匹配的时候不能光匹配0,还要匹配前后的字符串。
awk 'r=gensub(/([.:])(0[.:])/,"\\10\\2","g");print r' file.txt

参考技术A 一楼的方法肯定不行,到时会将所有带0的全部替换的
你得分析下目前格式的文件的特殊性,比如是否有空间缺失0的
如果仅仅是第一行第一个字符的话,可以用如下命令:
sed -i "1,$s/^0/00" xxx.txt
如果有其他情况还需分析追问

一楼的0全变成00了,你的运行不了,而且我不只是要改变第一个字符,我想着用awk-F“:"分割什么的,具体的就不会用了

追答

呵呵,不好意思啊,忘加了一个参数,正确的是这个
sed -i "s/^0/00/g" xxx.txt
如果是awk处理的话,你得将文件拿出部分来,找找规律

参考技术B sed -e 's/0/00/' tmp.file

Linux中用shell怎么获取IP地址及MAC地址?

参考技术A 我给出前三个的答案吧
#!/bin/bash
OUTPUT=jk0701_xxx_ks.txt
/sbin/ifconfig eth0 | sed -n '/inet addr:/ s/inet addr:/IPADDR=/pg' | awk -F" " 'print $1' >$OUTPUT
/sbin/ifconfig eth0 | sed -n '/HWaddr/ s/^.*HWaddr */HWADDR=/pg' >> $OUTPUT
netstat -an |grep ":23" |grep "ESTABLISHED" | grep -cv "grep" >> $OUTPUT

以上是关于shell补齐mac地址的主要内容,如果未能解决你的问题,请参考以下文章

Linux中用shell编程获取IP地址及MAC地址

用shell实现MAC地址最后一位增加: 如,mac=70:65:82:00:21:13 对其进行加1操作后成为70:65:82:00:21:14

shell脚本批量获取内网主机的MAC地址

求教大神怎么用shell脚本把16进制的MAC地址转化为10进制

编写MAC记录与端口扫描脚本的shell脚本

shell应用4