Bash 如何在狂欢节结束后重读这个词?

Bash 如何在狂欢节结束后重读这个词?,bash,grep,Bash,Grep,试图从这样的结果(见下文)中获取MAC地址a4:1f:72:6e:2a:cf,并将其保存在变量$NewMAC中。发生这种情况的方式是将arp扫描输出到文本文件,这就是结果 Interface: eth2, datalink type: EN10MB (Ethernet) Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/) 192.168.1.100 a4:1f:72:6e:2a

试图从这样的结果(见下文)中获取MAC地址a4:1f:72:6e:2a:cf,并将其保存在变量$NewMAC中。发生这种情况的方式是将arp扫描输出到文本文件,这就是结果

Interface: eth2, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)

192.168.1.100    a4:1f:72:6e:2a:cf    (Unknown)

1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 1 hosts scanned in 0.143 seconds (6.99 hosts/sec). 1 responded
这将选择包含以太网地址的行。如果您有GNU
grep
,则可以使用
-o
仅选择匹配的文本。如果空格很重要(你绝对不可能有它们),那么你必须更草率(不要寻找空格)或者使用更少的标准符号,例如
\b
来表示单词的开头/结尾

因此:

NewMAC=$(arp-scan ... | grep -E -o '\b([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}\b')
如果没有GNU
grep
,可以使用
|awk'{print$2}'
打印第二列输出

NewMAC=$(arp-scan ... | grep -E ' ([[:xdigit:]]{2}:){5}[[:xdigit:]]{2} ' | awk '{print $2}')

这个成功了!!!非常感谢。一个旁注是,有没有办法使MAC地址的字母大写?@user3525621:将
{print$2}
替换为
{print touper($2)}
或附加
|tr'[:lower:'[:upper:'
+1作为背景信息
-o和
\b
也可以在FreeBSD(OSX)
grep
中工作。
NewMAC=$(arp-scan ... | grep -E ' ([[:xdigit:]]{2}:){5}[[:xdigit:]]{2} ' | awk '{print $2}')
awk '/^[0-9]+[.][0-9]+[.][0-9][.][0-9]+/ {print $2}' arp-scan-output.txt