¿Puede alguien decirme las diferencias técnicas entre grep, egrep, y fgrepy proporcionar ejemplos adecuados?
¿Cuándo necesito usar grepover egrepy viceversa?
                    
                        grep
                                regular-expression
                                
                    
                    
                        mr_eclair
fuente
                
                fuente

Respuestas:
egrepes 100% equivalente agrep -Efgrepes 100% equivalente agrep -FHistóricamente, estos interruptores se proporcionaron en binarios separados. En algunos sistemas Unix realmente antiguos, encontrará que necesita llamar a los binarios separados, pero en todos los sistemas modernos se prefieren los conmutadores. La página de manual de grep tiene detalles sobre esto.
En cuanto a lo que hacen,
-Ecambia grep a un modo especial para que la expresión se evalúe como ERE (Expresión regular extendida) en lugar de su coincidencia de patrón normal. Los detalles de esta sintaxis se encuentran en la página del manual.El
-Finterruptor cambia grep a un modo diferente donde acepta un patrón para que coincida, pero luego divide ese patrón en una cadena de búsqueda por línea y realiza una búsqueda OR en cualquiera de las cadenas sin hacer ninguna coincidencia de patrón especial.Aquí hay algunos escenarios de ejemplo:
Tiene un archivo con una lista de, digamos, diez nombres de usuario de Unix en texto sin formato. Desea buscar el archivo de grupo en su máquina para ver si alguno de los diez usuarios enumerados está en algún grupo especial:
La razón por la que el
-Fconmutador ayuda aquí es que los nombres de usuario en su archivo de patrones se interpretan como cadenas de texto sin formato. Los puntos, por ejemplo, se interpretarían como puntos en lugar de comodines.Desea buscar utilizando una expresión elegante. Por ejemplo, el paréntesis
()se puede usar para indicar grupos con|un operador OR. Puede ejecutar esta búsqueda usando-E:... para devolver líneas que comienzan con "nofork" o "nogroup". Sin el
-Einterruptor, tendrías que escapar de los caracteres especiales involucrados porque con la coincidencia de patrón normal solo buscarían ese patrón exacto;fuente
egrepofgrep;-EY-Fson estándar. En realidad, hay pequeñas incompatibilidades enegrep: trata de manera{ligeramente diferente.fgrepusa el backend de Aho-Corasick, mientras quegrepusa una versión modificada de Commentz-Walter. Esto significa quegreptiene una complejidad O (mn)fgrepen el peor de los casos, mientras que en el peor es O (m + n).egrepygrep -Efueron manejados por diferentes ejecutables, BusyBox y BSD grep. Las dos variantes tenían diferencias de comportamiento para construcciones de expresiones regulares no Posix, como\s. Esto llevó a mucha confusión ...De
man grep:Utiliza
fgrepogrep -Fsi no desea que la cadena grepped se interprete como un patrón.Usted usa
egrepogrep -Esi necesita usar una expresión regular extendida.fuente
egrepyfgrepson básicamente equivalentes agrep -Eygrep -F(respectivamente):Sin embargo, los mensajes de error pueden diferir.
fuente
De "man grep":
fuente
Si busca una cadena literal y desea asegurarse de que la cadena que pasó se interprete literalmente (es decir, sin arriesgarse a decir que un punto o un signo de interrogación se interpretará como algo diferente) use fgrep o egrep -F.
En cuanto a la diferencia entre egrep y grep, creo que egrep es la mayoría de las veces lo que desea. El sitio del manual de GNU enumera las diferencias entre grep y egrep que parecen estar en la sintaxis: algunas cosas requieren barras diagonales mientras que otras no. Creo que egrep es más "compatible" con perl regexps y javascript regexps, por lo que me resulta más fácil usar egrep.
Por cierto. Realmente te animo a dar acuse de recibo una oportunidad - que apoya Pregs, y tiene valores por defecto más útiles (es decir, coloración, saltando directorios probablemente-no-lo-que-quieren como .svn, capacidad de seguir enlaces simbólicos, y es un poco más fácil de escribir ack que grep -E).
fuente