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.
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
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.
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 ""
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 ,
.
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 '.
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.
Tags linux