shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Grep com asterisco não mostra o que eu quero


From: Felipe Kellermann
Subject: Re: [shell-script] Grep com asterisco não mostra o que eu quero
Date: Wed, 1 Mar 2006 11:39:55 -0300 (BRT)
User-agent: Pine <http://www.washington.edu/pine/>

On Wed, 1 Mar 2006 11:38am  -0300, Eriberto wrote:

> lua:~# ls
> mala  mela  taco  testa  teste  todos
> 
> lua:~# ls | grep te
> testa  teste
> 
> lua:~# ls | grep te*
> 
> O último comanado não mostrou nada. Ele não deveria interpretar como o 
> "e", aparecendo de 0 a n vezes, e mostrar "taco  testa  teste  todos"???

O que está acontecendo é que o shell vai expandir (globbing) esse teu te*.

O `ls' faz um teste para ver se ele está enviando os resultados para um 
terminal ou não. Se não está, ele faz algumas modificações no compotamento 
dele por opções implícitas (por exemplo, umas das opções implícitas 
adicionadas é -1). Exemplo:

  $ ls
  mala  mela  taco  testa  teste  todos
  $ ls | cat -n
     1  mala
     2  mela
     3  taco
     4  testa
     5  teste
     6  todos


O teu te* vai expandir para "testa teste":

  $ echo te*
  testa teste


E, portanto, teu comando final é este, substituindo o glob (te*):

  ls | grep testa teste


Não tem nenhum arquivo com o nome "testa teste", e por isso não mostra 
nada. A minha única curiosidade é entender o motivo de tu precisar estar 
usando grep para procurar os arquivos. Em geral é interessante, melhor e 
mais limpo usar só glob. Quanto mais flexível é o globbing do shell, mais 
interessante, útil e poderoso é o ambiente.

Por exemplo:
  $ arquivos=(te*)

Ou

  $ for in te*; { ... }  


OBS: E a interpretação não é de "`e' zero ou mais". Há diferenças entre 
expressões regulares e globbing. Em um glob o teu "te*" significa apenas o 
literal "te" seguido de qualquer coisa.

-- 
Felipe Kellermann


reply via email to

[Prev in Thread] Current Thread [Next in Thread]