Me gustaría dar un paseo a través de las diferencias entre grep
, pgrep
, egrep
y, fgrep
y cómo iba a usarlos.
linux
command-line
grep
Eric Leschinski
fuente
fuente
Respuestas:
Diferencias entre grep, pgrep, egrep y fgrep (Linux):
grep
grep es un acrónimo que significa "Impresión de expresiones regulares globales". grep es un programa que escanea un archivo o archivos específicos línea por línea, devolviendo líneas que contienen un patrón. Un patrón es una expresión que especifica un conjunto de cadenas al interpretar los caracteres como metacaracteres. Por ejemplo, el meta carácter de asterisco (*) se interpreta como "cero o más del elemento anterior". Esto permite a los usuarios escribir una serie corta de caracteres y metacaracteres en un comando grep para que la computadora nos muestre en qué líneas coinciden los archivos.
El comando grep estándar se ve así:
grep imprime los resultados de búsqueda en la pantalla (stdout) y devuelve los siguientes valores de salida:
Algunos indicadores comunes son:
-c
para contar el número de coincidencias exitosas y no imprimir las coincidencias reales,-i
hacer que la búsqueda no sea sensible-n
a mayúsculas, imprimir el número de línea antes de cada impresión de coincidencia,-v
tomar el complemento de la expresión regular (es decir, devolver las líneas que no coinciden), y-l
para imprimir los nombres de los archivos con líneas que coinciden con la expresión.egrep
egrep es un acrónimo que significa "Impresión de expresiones regulares globales extendidas".
La 'E' en egrep significa tratar el patrón como una expresión regular. "Expresiones regulares extendidas" abreviado 'ERE' está habilitado en egrep. egrep (que es el mismo que
grep -E
) trata+
,?
,|
,(
, y)
como meta-caracteres.En expresiones regulares básicas (con grep), el meta-caracteres
?
,+
,{
,|
,(
, y)
pierden su significado especial. Si quieres grep para tratar a estos personajes como meta-caracteres, escapar de ellos\?
,\+
,\{
,\|
,\(
, y\)
.Por ejemplo, aquí grep usa expresiones regulares básicas donde el más se trata literalmente, cualquier línea con un más se devuelve.
Por otro lado, egrep trata el "+" como un meta carácter y devuelve cada línea porque más se interpreta como "una o más veces".
Aquí cada línea se devuelve porque
+
egrep la trató como un metacarácter. grep normal habría buscado solo líneas con un literal+
.fgrep
fgrep es un acrónimo que significa "Impresión de expresiones regulares globales de cadena fija".
fgrep (que es lo mismo que grep -F) es grep fijo o rápido y se comporta como grep pero NO reconoce ningún meta-carácter de expresión regular como especial. La búsqueda se completará más rápido porque solo procesa una cadena simple en lugar de un patrón complejo.
Por ejemplo, si quisiera buscar en mi .bash_profile un punto literal (.), Usar grep sería difícil porque tendría que escapar del punto porque el punto es un meta carácter que significa 'comodín, cualquier carácter único':
El comando anterior devuelve cada línea de myfile.txt. Haz esto en su lugar:
Entonces solo las líneas que tienen un literal '.' en ellos se devuelven. fgrep nos ayuda a no molestarnos en escapar de nuestros meta personajes.
pgrep
pgrep es un acrónimo que significa "Impresión de expresiones regulares globales de ID de proceso".
pgrep revisa los procesos que se ejecutan actualmente y enumera los ID de proceso que coinciden con los criterios de selección para stdout. pgrep es útil cuando todo lo que quiere saber es el número entero de identificación de proceso de un proceso. Por ejemplo, si quisiera conocer solo la ID del proceso de mi proceso mysql, usaría el comando
pgrep mysql
que devolvería una ID del proceso como 7312.fuente
pgrep
manual : el nombre del proceso utilizado para la coincidencia se limita a los 15 caracteres presentes en la salida de / proc / pid / stat . Use la opción -f para comparar con la línea de comando completa, / proc / pid / cmdline .