Comando grep e expressões regulares [RESOLVIDO]

1. Comando grep e expressões regulares [RESOLVIDO]

Marcus V. Oliveira
voidmarcus

(usa Arch Linux)

Enviado em 27/02/2017 - 16:31h

Olá pessoal,

Estou tentando utiliza o comando grep para extrair o nome das placas wireless do comando ifconfig. Meu código é o seguinte:

[1]
ifconfig | grep "wl([^ || :]*)" 


Como saída, eu deveria obter:

[2]
wlp5s0 


Entretanto, não há saída alguma. =(

Simplificando a expressão para obter apenas a linha em que "wl" aparece, temos:

[3]
ifconfig | grep "wl" 


Com o seguinte output:

[4]
wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 


Utilizei o site de exemplos interativos do livro Expressões Regulares para testar a expressão[1], e ela está funcionando perfeitamente.
http://piazinho.com.br/ed5/exemplos.html#1

Alguém sabe me dizer o que está ocorrendo?


  


2. MELHOR RESPOSTA

Robot
Mr.Robot

(usa Ubuntu)

Enviado em 27/02/2017 - 18:22h

O que tive no retorno foi isso:

$ ifconfig | grep "wl[^ || :]*"
wlp1s0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx


sendo que só o nome da minha interface de rede está destacada em negrito e com uma cor vermelha diferenciada.

Se você olhar no grep --help, descobre que para aparecer apenas a parte que "bate" com o que pesquisou tem de acrescentar --only-matching ou -o. Por padrão o grep mostra a linha toda.

Fica assim:

$ ifconfig | grep "wl[^ || :]*" -o
wlp1s0


3. Re: Comando grep e expressões regulares

Robot
Mr.Robot

(usa Ubuntu)

Enviado em 27/02/2017 - 17:42h

Não conheço bem o grep mas tirei os parênteses e funcionou. :D
Que sorte!

tenta ai:
ifconfig | grep "wl[^ || :]*" 



4. Re: Comando grep e expressões regulares [RESOLVIDO]

Marcus V. Oliveira
voidmarcus

(usa Arch Linux)

Enviado em 27/02/2017 - 18:15h

Mr.Robot escreveu:

Não sei nada sobre o grep mas tirei os parênteses e funcionou. :D
Que sorte!

tenta ai:
ifconfig | grep "wl[^ || :]*" 



Ué!? Comigo não deu! Confere aí:

marcusvoliveira@marte ~ ifconfig | grep "wl[^ || :]*"
wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500


Era pra sair só "wlp5s0"... No seu saiu certinho?

grep "wl" retorna a linha completa. A expressão ([^ || :]*) deveria selecionar e cortar a palavra "wlp5s0". Phoda que eu também não sei nada de grep. hahaha

Mas vlew assim mesmo! =)

A duvida ainda persiste, se alguém puder apontar uma solução.


5. Re: Comando grep e expressões regulares [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/02/2017 - 22:23h

voidmarcus escreveu:

Olá pessoal,

Estou tentando utiliza o comando grep para extrair o nome das placas wireless do comando ifconfig. Meu código é o seguinte:

[1]
ifconfig | grep "wl([^ || :]*)" 


Como saída, eu deveria obter:

[2]
wlp5s0 


Entretanto, não há saída alguma. =(

Simplificando a expressão para obter apenas a linha em que "wl" aparece, temos:

[3]
ifconfig | grep "wl" 


Com o seguinte output:

[4]
wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 


Utilizei o site de exemplos interativos do livro Expressões Regulares para testar a expressão[1], e ela está funcionando perfeitamente.
http://piazinho.com.br/ed5/exemplos.html#1

Alguém sabe me dizer o que está ocorrendo?


Boa noite.
Para solucionar use grep -E, ou egrep
A regex esta certa, só faltou o "-E", que da suporta p/ expresão regular extendida...

marcelo oliver


6. Re: Comando grep e expressões regulares [RESOLVIDO]

Marcus V. Oliveira
voidmarcus

(usa Arch Linux)

Enviado em 28/02/2017 - 10:38h

Então, para expressão regular funcionar, é preciso utilizar o argumento -E ( suporte p/ expressão regular extendida) ou o egrep. (Vlew @msoliver)

O grep e o egrep retornam a linha por defaut, então temos que utilizar o argumento -o (only-matching) para retornar apenas o match. (Vlew @Mr.Robot)

Resultado:
ifconfig | grep "wl([^ || :]*)" -E -o
wlp0s20u2
wlp5s0


100% funcional!!!

Obrigado pessoal!! =)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts