grep -v "grep"
toma entrada línea por línea, y genera solo las líneas en las que grep
no aparece. Sin -v
, sería en el que las líneas de salida sólo grep
no aparecerá. Ver man grep
para más detalles.
En lo que respecta a la grep
utilidad en sí misma, no es importante que el patrón que se le grep
pasa como argumento sea el mismo que su nombre. Pero en la mayoría de los casos donde grep -v grep
realmente aparece, esto no es una coincidencia.
grep -v grep
(o grep -v 'grep'
o grep -v "grep"
) a menudo aparece en el lado derecho de una tubería cuyo lado izquierdo es un ps
comando. Eso es probablemente donde lo has visto. Por ejemplo, podría estar buscando programas en ejecución cuyos nombres, rutas o argumentos de línea de comandos sugieran que están relacionados con Xfce:
ek@Io:~$ ps x | grep xfce
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1 S+ 0:00 grep --color=auto xfce
Mi grep
comando se mostró en la salida, pero no es lo que estoy buscando. Estoy buscando información sobre los procesos que ya se estaban ejecutando cuando examiné lo que se estaba ejecutando, no el proceso que solo se está ejecutando debido a mi esfuerzo por examinar lo que se está ejecutando.
Una forma común de eliminar esta distracción es agregar otra tubería a grep -v grep
:
ek@Io:~$ ps x | grep xfce | grep -v grep
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
grep
sin -F
trata su patrón como una expresión regular en lugar de una cadena fija . Entonces, otro enfoque es escribir una expresión regular que coincida exactamente xfce
pero que se escriba de manera diferente. Por ejemplo:
ek@Io:~$ ps x | grep '[x]fce'
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Esto funciona porque [x]
es una clase de caracteres que coincide exactamente con la letra x
.
Un inconveniente de esos métodos populares es que filtrarán las líneas que contienen grep
incluso cuando no son el grep
comando que acaba de ejecutar usted mismo. Es posible que ni siquiera sean grep
comandos, solo comandos cuyos nombres, rutas o argumentos de línea de comandos contienen grep
. Entonces, como ha señalado Sergiy Kolodyazhnyy , a menudo ninguna de esas formas (ni ningún otro enfoque que implique canalizar la salida de ps
) es realmente ideal y, como mencionó Nic Hartley , otras formas a menudo se usan pgrep
. Por ejemplo:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a
muestra la línea de comando completa. Omita para mostrar solo el número de identificación del proceso.
-f
busca en la línea de comando completa. Omita para buscar solo los nombres.
man grep
leer la página del manual de referencia para el comando, o para obtener más información sobre ciertos comandos (inc. Grep) puedeinfo grep
... es decir. su sistema tiene documentación que a menudo es muy útil.