Você está usando csh
, que vê o *
e tenta expandi-lo como um shell glob e falha. Ou seja, é csh
dizendo "Sem correspondência" aqui, não grep
. Ao contrário das cascas da família Bourne , csh
não passará um padrão glob inesgotável para o comando, então você deve citá-lo para obter csh
para liberá-lo para grep
.
Eu recomendo aspas simples aqui, pois você não está tentando interpolar uma variável na string:
% grep 'ar*a' temp
sarah
saab
marrrrrrrrra
As aspas duplas também funcionarão nesse caso porque seu padrão não contém $
, mas eu recomendo usar aspas simples aqui mesmo assim. É um hábito que vale a pena cultivar para considerar cuidadosamente as citações que você usa em linguagens que permitem usá-las de forma quase intercambiável, como shell, Perl, etc. Não precisamos de interpolação de string aqui, então escolheremos não usar o estilo de citação que permite isso.
Você também deve citar os padrões de ER sob os shells da família Bourne, a propósito. Como Mike Wagner sugere em seu comentário acima, porque expressões regulares e padrões glob use muitos dos mesmos caracteres especiais , às vezes você pode escrever um padrão RE que apenas acontece para também combinar alguns arquivos, e é assim inesperadamente expandido pelo shell.