Uma dúvida sobre o grep (fgrep)

1. Uma dúvida sobre o grep (fgrep)

Lucas Silva
Bluaeu

(usa Outra)

Enviado em 10/05/2020 - 18:18h

Fala, pessoal!
Então… Eu estou construindo um código em Shell Script, até que me deparei com a necessidade de fazer uma busca em um arquivo de texto e mandar a saída para uma variável. Eu usei o grep para fazer a busca, mas tem um detalhe, o grep me devolve todas as linhas que contenham a string da minha busca… e eu queria que ele me devolve-se apenas a linha correspondente à string exata que eu passei… Após algumas pesquisas, consegui fazer com que o grep me devolve-se a linha contendo a string exata que passei. O trecho ficou assim:

linhaexata=$(grep -n -F -x “$StringQueOUserVaiPassar” [caminho])


Beleza, deu certo, eu consigo receber do grep a linha contendo a string exata que o usuário passou, mas eu não entendo perfeitamente como isso está funcionando. Eu entendo quase tudo, exceto como o “-F” está funcionando aí…

Sobre o “-x” eu li que ele “Selecione apenas correspondências que correspondam exatamente à linha inteira”, ok… faz sentido, ele está permitindo o grep pegar a string exata que foi passada.

Mas sobre o “-F”… li que ele “Interpreta PADRÃO como uma lista de cadeias fixas, separadas por novas linhas , que devem ser correspondidas”. No próprio “-help” do comando grep consta: “-F, --fixed-strings: PADRÃO são textos separados por nova linha

Mas admito que não ficou claro para mim como isso está funcionando… o papel exato do “-F” aí… Alguém com uma didática melhorzinha poderia me dar um help? Apesar de estar funcionando no meu código, o mais importante para mim é entender como funciona.

Obrigado desde já!


  


2. Re: Uma dúvida sobre o grep (fgrep)

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 10/05/2020 - 20:27h


Aqui tem um exemplo de aplicação que usa justamente o -F. Olha:
https://pt.wikipedia.org/wiki/Grep
___________________________________
Conhecimento não se Leva para o Túmulo.


3. Re: Uma dúvida sobre o grep (fgrep)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/05/2020 - 22:00h


Bluaeu escreveu:

Fala, pessoal!
Então… Eu estou construindo um código em Shell Script, até que me deparei com a necessidade de fazer uma busca em um arquivo de texto e mandar a saída para uma variável. Eu usei o grep para fazer a busca, mas tem um detalhe, o grep me devolve todas as linhas que contenham a string da minha busca… e eu queria que ele me devolve-se apenas a linha correspondente à string exata que eu passei… Após algumas pesquisas, consegui fazer com que o grep me devolve-se a linha contendo a string exata que passei. O trecho ficou assim:

linhaexata=$(grep -n -F -x “$StringQueOUserVaiPassar” [caminho])


Beleza, deu certo, eu consigo receber do grep a linha contendo a string exata que o usuário passou, mas eu não entendo perfeitamente como isso está funcionando. Eu entendo quase tudo, exceto como o “-F” está funcionando aí…

Sobre o “-x” eu li que ele “Selecione apenas correspondências que correspondam exatamente à linha inteira”, ok… faz sentido, ele está permitindo o grep pegar a string exata que foi passada.

Mas sobre o “-F”… li que ele “Interpreta PADRÃO como uma lista de cadeias fixas, separadas por novas linhas , que devem ser correspondidas”. No próprio “-help” do comando grep consta: “-F, --fixed-strings: PADRÃO são textos separados por nova linha

Mas admito que não ficou claro para mim como isso está funcionando… o papel exato do “-F” aí… Alguém com uma didática melhorzinha poderia me dar um help? Apesar de estar funcionando no meu código, o mais importante para mim é entender como funciona.

Obrigado desde já!

Boa noite.
Use o "-w" ou o limitador de borda "\b".
Exemplos:
texto=(estomacais maca macarrão macarronada macaco macacada macaquinhas)
Veja a saída dos comandos:
printf "%s\n" ${texto[@]}|grep 'maca'
printf "%s\n" ${texto[@]}|grep -w 'maca'
printf "%s\n" ${texto[@]}|grep '\bmaca\b'
printf "%s\n" ${texto[@]}|grep -x 'maca'

Com "-w", "-x" ou \bstring\b", a saída é igual,
pois, no exemplo, a linha tem somente uma palavra.
Caso tivesse uma linha contendo
"maca mais outras palavras"
o grep -x, "Não casaria"
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts