Como formatar a saída arp -a?

3

Estou tentando formatar arp -a output para o meu gosto. Por exemplo, no momento em que sai:

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

Mas eu quero que seja algo como:

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

Se eu fizer eco de uma das linhas com um comando BAD sed que eu criei, ele formatará a saída para o meu gosto, mas não posso usá-la em um comando arp -a

Comando:

$ 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

Mas como posso formatar a saída arp -a dessa maneira?

    
por Reno 07.04.2016 / 18:04

2 respostas

4

Dê uma chance a essa versão do sed :

arp -a | sed 's/^\([^ ][^ ]*\) (\([0-9][0-9.]*[0-9]\)) at \([a-fA-F0-9:]*\)[^a-fA-F0-9:].*$/;;/'
    
por Jay jargot 07.04.2016 / 18:31
2

com o awk:

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

Saída:

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'[ ()]' : define separadores de campo para espaços em branco, ( e )

OFS=";" : define o Separador do campo de saída como ;

    
por Cyrus 07.04.2016 / 21:40

Tags