如何格式化 arp -a 输出?

如何格式化 arp -a 输出?

我正在尝试arp -a按自己的喜好格式化输出。例如,目前它输出:

MyRouter (172.16.3.x) at XX:XX:XX:XX:XX:XX [ether] on eth0
PC1 (172.16.3.x) at XX:XX:XX:XX:XX:XX [ether] on eth0
PC2 (172.16.3.x) at XX:XX:XX:XX:XX:XX [ether] on eth0

但我希望它输出类似的内容:

MyRouter;172.16.3.x;XX:XX:XX:XX:XX:XX
PC1;172.16.3.x:XX:XX:XX:XX:XX:XX
PC2;172.16.3.x;XX:XX:XX:XX:XX:XX

如果我用坏的我创建的 sed 命令,它会根据我的喜好格式化输出,但我不能在命令上使用arp -a

命令:

$ echo "MyRouter (172.16.3.x) at XX:XX:XX:XX:XX:XX [ether] on eth0" | sed 's/ (/;/g' | sed 's/) at /;/g' | sed 's/ \[.*//g'
MyRouter;172.16.3.x;XX:XX:XX:XX:XX:XX

但是我怎样才能arp -a像这样格式化输出?

答案1

给这个sed命令版本尝试一下:

arp -a | sed 's/^\([^ ][^ ]*\) (\([0-9][0-9.]*[0-9]\)) at \([a-fA-F0-9:]*\)[^a-fA-F0-9:].*$/\1;\2;\3/'

答案2

使用 awk:

arp -a | awk -F'[ ()]' '{OFS=";"; print $1,$3,$6}'

输出:

我的路由器;172.16.3.x;XX:XX:XX:XX:XX:XX
PC1;172.16.3.x;XX:XX:XX:XX:XX:XX
PC2;172.16.3.x;XX:XX:XX:XX:XX:XX

-F'[ ()]':将字段分隔符设置为空格,(并且)

OFS=";":将输出字段分隔符设置为;

相关内容