Listar apenas nomes de interface para ifaces que possuem o campo 'parent: eth0' na saída ifconfig com sed e / ou grep

0

ifconfig output:

lo: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
eth0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
        address: 01:02:03:04:05:06
        media: Ethernet 1000baseT full-duplex
        status: active
        inet 192.168.0.10 netmask 0xffff0000 broadcast 192.254.255.255
        inet alias 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
        inet6 fe80::0:0:0:01%eth0 prefixlen 64 scopeid 0x4
vlan01: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        vlan: 01 priority: 0 parent: eth0
        address: 01:02:03:04:05:06
        inet 192.168.0.11 netmask 0xfffffff0 broadcast 192.254.255.255
        inet6 fe80::0:0:0:02%vlan01 prefixlen 64 scopeid 0x6
        inet6 2a03:0:0:0::e1 prefixlen 64

Note que, para vlan01 , há um registro 'pai: eth0'. O que preciso é obter vlan01 para essa saída específica. Eu tenho apenas sed e grep à minha disposição.

É possível com ifconfig -a | sed '...' ?

    
por Artem 11.05.2016 / 17:18

2 respostas

0

Podemos fazer isso com sed:

#!/bin/sed -nf

# If it begins with anything except whitespace, trim it down to the
# bit before ":", and store that into hold space.
/^[^ ]/{
s/:.*//
h
}

# If we see "parent: eth0", then print the hold space.
/parent: eth0/{
g
p
}

Com sua entrada, isso gera vlan01 (e uma nova linha).

    
por 11.05.2016 / 19:01
0

Usando apenas grep :

ifconfig | grep -B1 parent | grep -oh ^[a-z0-9]*
# -B num - Print num lines of leading context before matching lines.
# -o Print only the matched (non-empty) parts of matching lines, with each such part on a separate output line.

Isso gera vlan01 para a saída fornecida na sua pergunta. Observe que meu exemplo procura apenas parent . O padrão deve ser atualizado para refletir o que você quer - parent: eth0 ou outro.

    
por 11.05.2016 / 20:06