Imprimir vários endereços IP de 'ifconfig' em uma linha

0

Eu gostaria de imprimir vários endereços IP de ifconfig em uma linha.

Esta é minha tentativa usando grep, cut and awk

user@linux:~$ ifconfig | grep ad.*Bc
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2
192.168.1.1  Bcast
10.1.1.1  Bcast
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print $1}'
192.168.1.1
10.1.1.1
user@linux:~$ 

Infelizmente, a saída que posso obter é

192.168.1.1
10.1.1.1

em 2 linhas.

É possível produzir uma saída como essa?

192.168.1.1 , 10.1.1.1
    
por Sabrina 29.06.2018 / 06:25

5 respostas

1

Oi, você pode tentar adicionar |tr -s '\n' ',' no final

isso substitui a nova linha por vírgula. O problema é que não há final de linha final que você possa acrescentar depois, se necessário.

    
por 29.06.2018 / 08:12
1

Use Separador de registro de saída ( ORS ) como vírgula ( , ) no awk

ifconfig | grep ad.*Bc | cut -d: -f2 | awk 'BEGIN{ORS=" , ";} {print $1}' | sed 's#, $##' &&  echo ""
    
por 29.06.2018 / 09:17
1
echo $(ifconfig | grep -o 'addr:[^ ]*' | cut -f2 -d:) | sed 's/ /, /g'                               

grep -o produz apenas a string correspondente ao padrão. O comando cut remove o prefixo addr: (observe que outras versões do Linux, como por exemplo o Debian, tem uma saída ifconfig diferente que não cola addr: no endereço).

O resultado é unido em uma linha, tornando cada "palavra" um parâmetro para eco pela substituição do comando $( ... ) .

Finalmente, sed substitui cada espaço por , .

    
por 29.06.2018 / 09:20
1

Aqui está outro na mesma linha. Este lida com ambas as formas de ifconfig (o seu produz linhas iniciando inet addr:10.11.12.13 , o outro produz linhas iniciando inet 10.11.12.13 ):

ifconfig | sed -nr 's/^.*?inet (addr:)?([0-9.]+).*//p' | xargs | sed 's/ / , /g'
10.20.3.131 , 127.0.0.1

O mesmo código também manipula o resultado de ip addr show (também ip a ) quando você está pronto para ir para iproute2 :

ip a | sed -nr 's/^.*?inet (addr:)?([0-9.]+).*//p' | xargs | sed 's/ / , /g'
127.0.0.1 , 10.20.3.131

Em ambos os casos, você pode omitir os endereços de loopback que começam com 127. , inserindo grep -v '^127' into the pipeline before the xargs '.

    
por 29.06.2018 / 10:37
1

Você pode tentar este sed

ifconfig | sed -n '
  $ {
  x
  s/^.//
  s/\n/ , /
  p
}
/.*addr:/!b
  s///
  s/ .*//
  H'

Mantenha todas as linhas com 'addr:' nele ... Remova tudo, mas mantenha o IP no espaço reservado No final, obtenha espaço, formato e impressão.

    
por 29.06.2018 / 10:41

Tags