Encontré echo file|grep fil*
fallas, pero echo abcd|grep abc*
tiene éxito.
No lo entiendo, ¿alguien puede explicar?
Encontré echo file|grep fil*
fallas, pero echo abcd|grep abc*
tiene éxito.
No lo entiendo, ¿alguien puede explicar?
Respuestas:
Hay dos problemas con tu ejemplo.
La principal es que está asumiendo que las expresiones regulares funcionan de la misma manera que los patrones globales, ya que *
es un comodín que significa "cualquier secuencia de caracteres". En las expresiones regulares, *
significa "cualquier número del átomo anterior", por lo que fil*
significa f
seguido de i
seguido de cero o más l
caracteres. Debe decir grep fil.*
para obtener el significado deseado: .
significa "cualquier carácter individual, por lo que .*
significa" cualquier secuencia de caracteres ".
El problema menor es que estás usando caracteres especiales sin comillas que significan algo bajo las reglas globales, lo que significa que el shell podría interpretarlos. Si tuviera algún archivo en el directorio local que coincida con los patrones globales fil*
o abc*
, el shell los expandiría , por grep
lo que obtendría los nombres de los archivos expandidos como un patrón, no el RE previsto. Siempre que usted esté usando este tipo de caracteres en la línea de comandos, debe citarlos: echo file | grep 'fil.*'
.
echo file|grep fil*
respuestas confil
e.