Я пытаюсь отформатировать вывод 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
так?
Дайте этот , команда 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=";"
: Выходной Разделитель полей наборов к ;