Respondí esta pregunta en SuperUser que estaba relacionada con el tipo de expresiones regulares que se usaban al agrupar una salida.
La respuesta que di fue esta:
tail -f log | grep "some_string.*some_string"
Y luego, en tres comentarios a mi respuesta, @Bob escribió esto:
.*
es codicioso y puede capturar más de lo que quieres..*?
Suele ser mejor.
Luego esto,
el
?
es un modificador activado*
, lo que lo hace perezoso en lugar del codicioso predeterminado. Asumiendo PCRE.
Busqué en Google PCRE
, pero no pude entender cuál es el significado de esto en mi respuesta.
y finalmente esto,
También debo señalar que esto es regex (grep haciendo POSIX regex por defecto), no un shell glob.
Solo sé qué es un Regex y su uso muy básico en el comando grep. Entonces, no pude obtener ninguno de esos 3 comentarios y tengo estas preguntas en mente:
- ¿Cuáles son las diferencias en el uso de
.*?
frente.*
? - ¿Cuál es mejor y bajo qué circunstancia? Por favor proporcione ejemplos.
También sería útil entender los comentarios, si alguien pudiera
ACTUALIZACIÓN: Como respuesta a la pregunta ¿En qué se diferencia Regex de Shell Globs? @Kusalananda proporcionó este enlace en su comentario.
NOTA: Si es necesario, lea mi respuesta a esta pregunta antes de responder para consultar el contexto.
.*
vs. .*?
La pregunta "diferencia entre expresiones regulares y globos de shell" ya se ha abordado en este sitio.