Respuesta técnica: tradicionalmente, egrepusaba un autómata finito determinista (DFA) internamente mientras grepusaba un autómata finito no determinista (NFA). En estos días, GNU grepy egrepadoptar un enfoque híbrido NFA / DFA.
Según el libro de Friedl Mastering Regular Expressions , para descubrir si su egrep(por ejemplo) tiene un motor NFA o si tiene un motor DFA, pruebe:
echo =XX========================================= | egrep 'X(.+)+X'
Freidl (p.147) dice:
Si tarda mucho tiempo en terminar, es un NFA ... Si termina rápidamente, es un DFA o un NFA con alguna optimización avanzada. ¿Muestra un mensaje de advertencia sobre un overow de pila o una coincidencia larga anulada? Si es así, es un NFA.
Friedl describe el motor NFA como "dirigido por expresiones regulares" y el DFA como "dirigido por texto". Los detalles de la distinción se describen a partir de la p.153 de su libro en adelante.
La consecuencia es que hay algunas combinaciones de patrones / texto que un DFA hace coincidir más rápidamente y otras que un NFA hace coincidir más rápidamente. Además, la forma en que escribe una expresión regular para un NFA puede tener un efecto significativo en la velocidad de coincidencia. A menudo, un DFA será más rápido, pero los DFA no admiten la coincidencia diferida, coinciden de manera diferente en algunos casos, no pueden hacer expresiones de búsqueda o referencias inversas, y omiten algunas otras características en comparación con los NFA.
Según Freidl, GNU grepusa un DFA cuando es posible y vuelve a un NFA cuando se usan referencias inversas .
egrepen este caso (ogrep, si se ha sustituidoegrepcongrep) es el uso de un DFA o NFA. Dado que, como han señalado otras respuestas, que diferentes implementaciones de la misma herramienta pueden usar diferentes motores de expresiones regulares, el hecho de que una herramienta dada tradicionalmente usara un motor particular no significa que una implementación particular de esa herramienta necesariamente use el mismo tipo de motor.La "familia" son solo accesos directos a diferentes
grepopciones (desdeman grep):fuente
egrepes solo un acceso directo para elgrep -Ecual permite el uso de expresiones regulares extendidas. Visite la páginaegrepdel manual para ver la página del manual de la "familia" de funciones de búsqueda de patrones como grep, egrep, fgrep, etc.En cuanto al uso, si usa expresiones regulares extendidas, entonces escribir
egreppodría ser más rápido que escribirgrep -Etodo el tiempo.fuente
El inconveniente
egrepes que su expresión regular es un poco más compleja y menos conveniente si no necesita la capacidad adicional. A veces, más potencia no es mejor si no es tan simple y fácil de usar.fuente