ip和mac地址linux

时间:2013-11-20 14:12:36

标签: linux terminal

我想在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

4 个答案:

答案 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:”或空格。
  • 在第1行
  • NR==1 {gsub(":", "", $5);mac=toupper($5)},根据上面的分隔符获取mac作为第5个值。以前,冒号被删除。
  • 在第2行
  • 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