A sintaxe que você está tentando usar pertence a expressões regulares estendidas, portanto, a resposta é muito simples, use egrep
ou inclua o -E
flag.
Aqui está um exemplo de uma linha de comando do grep que eu tentei:
grep '(565172|565173|565175)' /var/log/cups/error_log
Não produz saída, mesmo que todos os 3 valores estejam no arquivo várias vezes.
Eu tentei escapar das barras e isso melhorou um pouco as coisas - o valor do meio foi detectado, mas não o primeiro ou o último.
grep '(565172\|565173\|565175)' /var/log/cups/error_log
Eu também tentei double escapes e voltei a não obter resultados.
grep '(565172\|565173\|565175)' /var/log/cups/error_log
O que estou fazendo de errado? Obrigado.
O que você está enfrentando é a diferença entre expressões regulares básicas e estendidas. Da página de manual do grep:
In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, +, {, \|, (, and ).
Assim, você pode fazer o seguinte:
grep '\(565172\|565173\|565175\)' /var/log/cups/error_log
ou
grep -E '(565172|565173|565175)' /var/log/cups/error_log
O sinalizador -E ativa as expressões regulares "Estendidas". O GNU grep também suporta expressões regulares compatíveis com perl.
Tags grep