egrep regex -bash: erro de sintaxe próximo ao token inesperado `('

egrep regex -bash: erro de sintaxe próximo ao token inesperado `('

Usar egrep na linha de comando com regex não funciona e recebo o erro no título.

egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"

Eu verifiquei o regex emhttps://regex101.com/r/pL5pW4/1e usei shellcheck.net e ambos dizem que não há problemas. O que estou tentando fazer é combinar pastas específicas como esta:

egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the 

"sd.dfr" e o "teste" neste exemplo são a finalidade do regex. Para combinar qualquer combinação com os caminhos das pastas. Eu tentei citar, escapar, aspas duplas. Por que isto não está funcionando?

Responder1

grepprocura por expressões regularesno conteúdode arquivos. Ele não procuraarquivos cujos nomes correspondemexpressões regulares. (Use findpara isso.) Além disso, antes que o grep os veja, a lista de nomes de arquivos/diretórios que você fornece é interpretada pelo shell. O shell corresponde aos arquivos usando globosnão regexes.

Globs de shell não são tão precisos quanto expressões regulares, mas o seguinte pode funcionar bem para você:

egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"

Ou, melhor ainda, porque egrepestá obsoleto:

grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"

informação relacionada