[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] especie de "if-then-else" com sed
From: |
Marcelo F Andrade |
Subject: |
Re: [shell-script] especie de "if-then-else" com sed |
Date: |
Thu, 2 Oct 2014 10:17:23 -0300 |
2014-10-01 17:14 GMT-03:00 Ronaldo Ferreira de Lima
address@hidden [shell-script] <address@hidden>:
> [...]
> Achei a explicação um pouco confusa e incompleta, não há exemplos de
> input e de output.
Okay. Desculpe-me por isso. Tentei explicar de forma simples
para não enviar um email longo e confuso. Serei mais didático
e menos sintético desta vez. Vamos lá.
A quem não conhece, quero tratar uma saída do iwlist como esta
(mostrei apenas com as linhas relevantes):
[code]
# iwlist wlan0 scan
Cell 01 ...
Quality=48/70 Signal level=-64 dBm
Encryption key:off
ESSID:"WifiAberta"
...
Cell 02 ...
Quality=20/70 Signal level=-90 dBm
Encryption key:on
ESSID:"WifiWEP"
...
Cell 03 ...
Quality=32/70 Signal level=-84 dBm
Encryption key:on
ESSID:"WifiWPA"
...
IE: WPA Version 1
...
[/code]
Minha intenção é associar ao evento da tecla do wifi do meu
notebook com acpi um script que liste quais as redes sem-fio
estão disponíveis. Por exemplo, mostrando o essid, a qualidade
e o tipo de autenticação, se há.
Para isso comecei a fazer o seguinte (parece medonho, eu sei,
mas com um pouco de atenção dá pra entender):
[code]
# iwlist wlan0 scan | grep -Eo
'(ESSID:".+"|Quality=[0-9]{,2}/[0-9]{2}|Encryption key:(on|off)|WPA
Version (1|2))' \
| sed -nr 's/^ESSID:"(.+)"$/\1/p;
s/^Quality=([0-9]{1,2}\/70)$/\1/p;s/^Encryption key:off$/open/p;
s/^WPA Version (1|2)/wpa\1/p' \
> output
48/70
open
WifiAberta
20/70
WifiWEP
32/70
wpa1
WifiWPA
[/code]
É por aí! Mas esse resultado seria mais legível num fomato
tabular. No entanto, para casar legal, deveria ter 3 informações
para cada rede wifi (da célula do meio só listou-se a qualidade
e o essid). Gostaria de colocar nela um placeholder para indicar
que a autenticação é WEP, para poder exibí-las em formato
tabular, assim:
[code]
# vi output #incluí manualmente uma linha "wep" abaixo do 20/70
# cat output | awk '{ ORS=(NR%3?FS:RS) }1'
48/70 open WifiAberta
20/70 wep WifiWEP
32/70 wpa1 WifiWPA
[/code]
Se eu aplicar esse awk com a saída original, como a célula 2
só tem duas informações e estou agrupando os campos de
três em três, todo o restante da saída fica desalinhado.
A questão era como colocar um placeholder wep no script na
situação acima (o "else" do não-casamento do padrão).
BTW, se estiver num local onde só apareçam redes abertas
ou com autenticação WPA, o script já funciona muito bem. :-)
Explicou ou complicou?
Atenciosamente.
--
MARCELO F ANDRADE | Belem, Amazonia, Brazil | http://about.me/mfandrade
- especie de "if-then-else" com sed, Marcelo F Andrade, 2014/10/01
- Re: [shell-script] especie de "if-then-else" com sed, Tiago Peczenyj, 2014/10/01
- Re: [shell-script] especie de "if-then-else" com sed, Ronaldo Ferreira de Lima, 2014/10/01
- Re: [shell-script] especie de "if-then-else" com sed,
Marcelo F Andrade <=
- Re: [shell-script] especie de "if-then-else" com sed, Julio C. Neves, 2014/10/01
- Re: especie de "if-then-else" com sed, itamarnet, 2014/10/02
- Re: [shell-script] especie de "if-then-else" com sed, Paulo Bettega, 2014/10/02