Não consigo obter grep com expressões regulares para funcionar corretamente

1
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

Esta não deveria ser a saída?

sarah saab marrrrrra

Eu tentei usar putty e nxclient para o Windows 10.

    
por I'm a noob 31.10.2015 / 00:15

1 resposta

3

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.

    
por 31.10.2015 / 01:38

Tags