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

0

Usando egrep da linha de comando com regex não funciona e eu 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 no link e usei o 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 o que o regex é para. Para corresponder a qualquer combinação naqueles para caminhos de pasta. Eu tentei citar, escapar, citar duas vezes. Por que isso não está funcionando?

    
por user53029 02.09.2016 / 23:10

1 resposta

0

grep procura por expressões regulares no conteúdo dos arquivos. Não procura por arquivos cujos nomes correspondam expressõ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 a arquivos usando globs não expressões regulares.

Shell globs 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"
    
por 02.09.2016 / 23:31

Tags