token inesperado Cygwin '(' com grep

1

Estou usando o Cygwin no sistema operacional Windows 7.

Estou tentando corresponder um e-mail deste formato: x.y@enron.com

Esta é a minha regex:

grep [a-zA-Z0-9]+\.[a-zA-Z0-9]+@(E|e)nron\.com

retorna

-bash: syntax error near unexpected token '('

Funciona quando usado em regex101.com

Ele deve corresponder a e-mails como [email protected] e [email protected]

    
por Andres ZW 08.05.2018 / 15:56

1 resposta

2

[ , \ , ( e ) todos têm significados especiais para o shell e devem ser citados se você pretende passá-los textualmente em um argumento para um comando (aqui grep ). / p>

Observe também que intervalos como [a-z] fazem pouco sentido fora da localidade C.

Então, você provavelmente vai querer:

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@(E|e)nron\.com' < some-file

Ou:

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@[Ee]nron\.com' < some-file

Para relatar as linhas que correspondem a E xtended expressão regular e x atly. Com os caracteres al pha num eric limitados aos C locale (assim no Cygwin, letras ASCII em inglês / latim sem diacríticos e algarismos decimais arábicos; no idioma C [[:alnum:]] e [a-zA-Z0-9] correspondem aos caracteres mesma coisa).

Acima, usando o formulário '...' de cotação que é o mais strong (nenhum caractere é especial dentro deles).

+ , | , (...) é estendido operador regexp (não básico operadores regexp como esperado por grep sem -E ). Sem -x , grep procuraria correspondências dentro das linhas, por exemplo, corresponderia em uma linha como:

[email protected] [email protected] whatever
              ^^^^^^^^^^^^^

Sem LC_ALL=C , [[:alnum:]] poderia corresponder a caracteres de outros scripts alphetical (como os gregos, cirílicos, coreanos) e [a-z] poderia corresponder em alguns caracteres latinos com diacríticos como á , ç , ÿ , mas não outros como , ź como são após z ...

    
por 08.05.2018 / 16:49