Como posso modificar este comando sed para remover os dois pontos na saída

0

Eu preciso mostrar as interfaces ethernet em um servidor Centos 7. No centos 6.5, eu estava usando este comando (de outro post) e funciona bem em 6.5.

ifconfig -a | sed  -n 's/^\([^ ]\+\).*//p' | grep -Fvx -e lo 

no Centos 7 a saída da interface agora tem um ":"

então minha saída se parece com isso

ifconfig -a | sed  -n 's/^\([^ ]\+\).*//p' | grep -Fvx -e lo
ens32:
lo:

para remover o "lo:" eu modifiquei isso. o que resulta em ens32:

ifconfig -a | sed  -n 's/^\([^ ]\+\).*//p' | grep -Fvx -e lo:
ens32:

Como posso remover o ":" final? este sed pode ser modificado? ou outras ideias

    
por Bill Acevedo 10.08.2016 / 19:32

2 respostas

0

É lamentável que você não forneça a saída bruta do comando ifconfig. Mas eu iria para algo assim:

$ ifconfig -a | perl -anle 'print $F[0] if /(^\w)/'
$  enp2s0f0
   lo
   tun0
   wlp3s0b1

A saída bruta é a seguinte:

enp2s0f0  Link encap:Ethernet  HWaddr 3c:07:54:5f:5e:35  
          inet addr:192.168.1.114  Bcast:192.168.1.255 
[...] 

perl -anle, onde é 'a' dividir a linha na coluna e preencher a variável $ F 'n' é processar a linha de saída por linha, 'l' é colocar uma nova linha entre cada impressão e 'e' é executar o comando perl na linha de comando. Então siga o regex onde eu simplesmente digo que eu quero combinar a linha '//' que contém um caractere '\ w' no começo da linha '^'.

    
por 10.08.2016 / 21:01
0

Isso funcionará em sistemas antigos sem o cólon e em novos sistemas com os dois-pontos:

$ /sbin/ifconfig -a | awk -F'[ :]+' '$1 && $1!="lo" {print $1}'
eth0

Como alternativa, usando sed, isso também funcionará em sistemas novos e antigos:

$ /sbin/ifconfig -a | sed -n 's/[ :].*//; /^lo$/t; /./p'
eth0

Quando o awk ou o sed são usados, é raro precisar de um processo adicional para executar o grep.

Como o comando awk funciona

  • -F'[ :]+'

    Isto diz ao awk para tratar quaisquer espaços em branco ou dois pontos consecutivos como um separador de campo.

  • $1 && $1!="lo" {print $1}

    Se houver um primeiro campo e se esse campo não for lo , imprima-o.

Como o comando sed funciona

  • -n

    Isso diz ao sed não imprimir nada, a menos que explicitamente solicitado.

  • s/[ :].*//

    Isso diz ao sed para remover tudo, desde o primeiro espaço ou dois pontos até o final da linha.

  • /^lo$/t

    Se a linha corresponder a lo , pule o restante dos comandos e comece novamente na próxima linha.

  • /./p

    Se a linha contiver algum caractere, imprima a linha.

por 10.08.2016 / 23:27