Não consigo fazer com que o grep com expressões regulares funcione corretamente

Não consigo fazer com que o grep com expressões regulares funcione corretamente
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

Essa não deveria ser a saída?

sarah saab marrrrrra

Tentei usar putty e nxclient para Windows 10.

Responder1

Você está usando csh, que vê *e tenta expandi-lo como umglobo de conchae falha. Ou seja, está cshdizendo "Sem correspondência" aqui, não grep. DiferenteConchas da família Bourne, cshnão passará um padrão glob não expansível para o comando, então você deve citá-lo para cshliberá-lo para grep.

Eu recomendo aspas simples aqui, já que você não está tentandointerpolaruma variável na string:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

Aspas duplas também funcionarão neste caso porque seu padrão não contém $, mas eu recomendo usar aspas simples aqui de qualquer maneira. É um hábito que vale a pena cultivar considerar cuidadosamente quais aspas você usa em idiomas que permitem usá-las de forma semi-intercambiável, como Shell, Perl, etc. Não precisamos de interpolação de strings aqui, então escolheremos não usar o estilo de aspas isso permite.

A propósito, você também deve citar os padrões RE nas conchas da família Bourne. Como Mike Wagner sugere em seu comentário acima, porque expressões regulares e padrões globuse muitos dos mesmos caracteres especiais, às vezes você pode escrever um padrão RE que apenasacontecepara também corresponder a alguns arquivos e, portanto, é expandido inesperadamente pelo shell.

informação relacionada