Usar egrep desde la línea de comando con expresiones regulares no funciona y aparece el error en el título.
egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"
He verificado la expresión regular enhttps://regex101.com/r/pL5pW4/1y usé shellcheck.net y ambos dicen que no hay problemas. Lo que intento hacer es hacer coincidir carpetas particulares como esta:
egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the
"sd.dfr" y "test" en este ejemplo son para lo que sirve la expresión regular. Para hacer coincidir cualquier combinación de ellas con las rutas de las carpetas. Intenté citar, escapar, comillas dobles. ¿Por qué esto no funciona?
Respuesta1
grep
busca expresiones regularesen los contenidosde archivos. No buscaarchivos cuyos nombres coincidanexpresiones regulares. (Úselo find
para eso.) Además, antes de que grep los vea, el shell interpreta la lista de nombres de archivos/directorios que usted proporciona. El shell compara archivos usando globosno expresiones regulares.
Los globos de Shell no son tan precisos como las expresiones regulares, pero lo siguiente podría funcionar bastante bien para usted:
egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"
O, mejor aún, porque egrep
está en desuso:
grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"