grep: problema com expressão regular

grep: problema com expressão regular

Alguém pode explicar por que isso não funciona?

grep -ne '[A-Za-z]{1,30}\ [A-Z][a-z]{1,30}\W[A-Za-z]{1,30}\ [0-9]{1,30}\W[0-9]{5}\ [A-Za-z]{1,30}(\ [A-Za-z]{1,30})?' emails

Responder1

Primeiro, você está usando sintaxe de expressão regular estendida (ERE) {}, como ()e ?. Adicione a opção -Ede usar ERE ou escape {}e ()com barras invertidas e substitua ?assim:grep -ne '[A-Za-z]\{1,30\} [A-Z][a-z]\{1,30\}\W[A-Za-z]\{1,30\} [0-9]\{1,30\}\W[0-9]\{5\} [A-Za-z]\{1,30\}\( [A-Za-z]\{1,30\}\)\{0,1\}' emails

Segundo, você está escapando de espaços com barras invertidas entre aspas simples. Embora a maioria das implementações greptrate isso como espaços simples, o padrão posix considera isso indefinido:A interpretação de um caractere comum precedido por uma barra invertida ( '\' ) é indefinida.

Pode haver problemas adicionais, mas não podemos saber sem conhecer a sintaxe do seu arquivo e o que você desejagrep

informação relacionada