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
grep
procura por expressões regularesno conteúdode arquivos. Ele não procuraarquivos cujos nomes correspondemexpressões regulares. (Use find
para 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 egrep
está obsoleto:
grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"