我想在linux终端中输出ip-address和mac-address作为输出。
我不想要' addr'在ip-address之前。
mac-address必须采用以下格式:000C29DDED7C
(不包含':'以及所有大写字母)
我试过了:
echo "ip-address: `/sbin/ifconfig | head -2 | grep 'inet ' | tr -s ' ' | cut -d' ' -f3` mac-address: `/sbin/ifconfig | head -1 | tr -s ' ' | cut -d' ' -f5 | tr ':' ' ' | tr 'a-z' 'A-Z'`"
给我:
ip-address: addr:192.168.8.141 mac-address: 00 0C 29 AC 3C 02
答案 0 :(得分:0)
使用egrep
获取ips地址:
ifconfig|egrep -o "([0-9]+\.){3}[0-9]+"
获取没有子网掩码的ips地址,没有“addr:”:
ifconfig|egrep -o "addr:([0-9]+\.){3}[0-9]+"|sed "s/addr://g"
获取mac地址:
ifconfig|egrep -o "HWaddr [A-Za-z0-9:]+"|sed "s/HWaddr\ //"
您可以将每个命令的输出捕获到变量中以进行打印:
interfaceNum=1
ip=$(/sbin/ifconfig|egrep -o "addr:([0-9]+\.){3}[0-9]+"|sed -n "s/addr://g;${interfaceNum}p")
mac=$(/sbin/ifconfig|egrep -o "HWaddr [A-Za-z0-9:]+"|sed -n "s/HWaddr\ //g;${interfaceNum}p")
echo "ip=$ip, mac=$mac"
答案 1 :(得分:0)
或者使用sed:echo“ip-address:/sbin/ifconfig | head -2 | grep 'inet ' | tr -s ' ' | cut -d' ' -f3
mac-address:/sbin/ifconfig | head -1 | tr -s ' ' | cut -d' ' -f5 | tr ':' ' ' | tr 'a-z' 'A-Z'
”| sed -e's / addr:// g'
答案 2 :(得分:0)
这个awk
可以成功:
$ ifconfig | tr -s ' ' | awk -F" |addr:" 'NR==1 {gsub(":", "", $5);mac=toupper($5)} NR==2 {ip=$4} END{print "ip-address ==> " ip " mac ==> " mac}'
ip-address ==> 192.168.8.141 mac ==> 000C29AC3C02
tr -s ' '
挤压多个空格,正如您已经在做的那样。awk -F" |addr:"
将字段分隔符设置为“addr:”或空格。NR==1 {gsub(":", "", $5);mac=toupper($5)}
,根据上面的分隔符获取mac
作为第5个值。以前,冒号被删除。NR==2 {ip=$4}
,根据以上分隔符获取ip
作为第4个值。END{print "ip-address ==> " ip " mac ==> " toupper(mac)}'
打印结果,mac为大写。答案 3 :(得分:0)
你可以在两个地方添加sed,这将删除" addr:"和MAC地址之间的空格。
以下是整个命令
echo "ip-address: `/sbin/ifconfig | head -2 | grep 'inet ' | tr -s ' ' | sed 's/addr://g' |cut -d' ' -f3` mac-address: `/sbin/ifconfig | head -1 | tr -s ' ' | cut -d' ' -f5 | tr ':' ' ' |tr 'a-z' 'A-Z'|sed 's/ //g'`"
此命令的输出是
ip-address: 10.137.108.181 mac-address: AC162D72A875