Как отформатировать вывод 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

Если я повторю одну из строк созданной мной командой BAD 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 вывод, как это?

2 ответа

Решение

Попробуйте эту версию команды sed:

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

С awk:

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

Выход:

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

-F'[ ()]': устанавливает разделители полей в пробел, ( а также )

OFS=";": устанавливает разделитель поля вывода в ;

Другие вопросы по тегам