Para sua atual ifconfig output:
ifconfig | grep -A7 --no-group-separator '^s1-eth'
O Open-Vswitch cria interfaces virtuais, todas elas têm esse padrão: s[digit]-eth[digit] Por exemplo: s1-eth1, s1-eth2, s12-eth3, s2-eth3 ...
Eu quero mostrar informações de - por exemplo - todas as interfaces começando com s1 (no nosso exemplo, deve dar s1-eth1 e s1-eth2) .
Eu tentei este comando, mas ele mostra apenas a primeira linha de informação:

EstoumaisinteressadoeminformaçõescomoRXpackets,TXpackets,erros,HWaddr..assim:
ifconfig tem uma linha em branco entre cada interface, tornando-a perfeitamente adequada para leitura e processamento no "modo de parágrafo" em uma linguagem de script como awk ou perl . Um "parágrafo" é qualquer bloco de texto separado de outros blocos por uma ou mais linhas vazias.
Por exemplo:
ifconfig | awk -v RS='' '/^s1-eth[12]:/ {print}'
O exemplo awk acima define o separador de registro de awk ( RS ) para a sequência vazia, fazendo com que processe parágrafos em vez de linhas individuais. Nesse caso, cada parágrafo é testado para uma correspondência com ^s1-eth[12]: e é impresso se corresponder a.
Exemplo de saída do meu sistema:
$ ifconfig | awk -v RS='' '/^(ppp0|lo):/ {print}'
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 64237556 bytes 36962222928 (34.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64237556 bytes 36962222928 (34.4 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1412
inet ip.ip.ip.ip netmask 255.255.255.255 destination ip.ip.ip.ip
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 28220997 bytes 19305565357 (17.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21719890 bytes 3009382446 (2.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Observe que isso não é mais impresso em parágrafos - não há linha vazia entre cada interface "registro". Se você quiser parágrafos em sua saída, defina o separador de registro de saída ( ORS ) como duas novas linhas ( \n\n ). por exemplo,
ifconfig | awk -v RS='' -v ORS='\n\n' '/^(ppp0|lo):/ {print}'
Fazer algo semelhante com a saída de ip em vez de ifconfig é um pouco mais complicado. ip não produz saída ordenadamente separada por parágrafo. No entanto, ele gera a saída de cada interface em um bloco com o número da interface seguido por dois-pontos e um espaço no início de uma linha, com o restante dos detalhes das interfaces a seguir.
Para fazer uso disso, configure o RS para a expressão regular ( (^|\n)[0-9]+: ). Isso corresponde a quaisquer dígitos seguidos por dois-pontos e um espaço ( [0-9]+: ) no início do arquivo ( ^ , para corresponder ao primeiro registro, que seria ignorado) ou imediatamente após uma nova linha.
Por exemplo, no meu sistema:
$ ip addr | awk -v RS='(^|\n)[0-9]+: ' '/^(lo|eth0):/ {print}'
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 01:33:ed:b0:13:a9 brd ff:ff:ff:ff:ff:ff
(meu eth0 não tem nenhum endereço IP porque eu o configurei como uma ponte para VMs e contêineres docker. Os endereços IP estão na interface br0 )
Você pode usar grep -An para imprimir a linha correspondente e os n seguintes, mas isso é um pouco desordenado, pois o número de linhas pode variar.
Provavelmente, melhor usar awk . Isso imprimiria todas as seções que começam com enp1 ou enp3 . A primeira regra !/^ / {p=0} limpa a variável p se a linha não começar com um espaço, o segundo /^enp[13]/ {p=1} definirá se a linha começa com os nomes de interface que queremos e, em seguida, imprimiremos se p estiver definido . As linhas que começam com espaços correspondem apenas à última regra, então são impressas com base no valor anterior de p .
# /sbin/ifconfig -a |awk '!/^ / {p=0} /^enp[13]/ {p=1}; p'
enp1s0 Link encap:Ethernet HWaddr ...
inet addr:...
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:135284106 errors:0 dropped:0 overruns:0 frame:0
TX packets:144695 errors:0 dropped:0 overruns:0 carrier:2
collisions:0 txqueuelen:1000
RX bytes:8292624956 (8.2 GB) TX bytes:16595674 (16.5 MB)
enp3s0 Link encap:Ethernet HWaddr ...
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
No seu caso, é claro que você usaria um padrão como /^s1-eth/ .
I want to show information of -for example- all interfaces starting with
s1
Usando net-tools :
ifconfig | grep s1 -A9
Usando iproute2 :
ip -s link | grep s1 -A7
ifconfig | awk '/^s[[:digit:]]+-eth[[:digit:]]+:/ {flag=1} /!^[[:digit:]]+-eth[[:digit:]]+:/ {flag=0}flag'
Usando o awk, combine o padrão como descrito, definindo um sinalizador de impressão como 1, se existir, e 0, se não. Imprimir com base na bandeira.