¿Qué significa y hace grep -v "grep"?

17

Me preguntaba qué grep -v "grep"significa y qué significa.

Joe
fuente
8
Puede man grepleer la página del manual de referencia para el comando, o para obtener más información sobre ciertos comandos (inc. Grep) puede info grep... es decir. su sistema tiene documentación que a menudo es muy útil.
guiverc
12
grep -v "grep"a menudo se usa para filtrar grep mientras se enumeran los procesos y eso generalmente involucra 3 tuberías, aunque, por supuesto, hay mejores métodos como los pgrepque permiten mucha menos "plomería". Ver unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
Eso lo hace. Estoy llamando a mi rootkit grep.
Joshua
Normalmente se usa en un contexto no relacionado con la seguridad, como ps aux | grep fubar | grep -v grepdónde fubares algo que estoy desarrollando, que ha dejado de responder y cuya identificación quiero encontrar para poder matarlo. Suponga que hay dos de ellos, entonces killalles inapropiado.
nigel222

Respuestas:

69

grep -v "grep"toma entrada línea por línea, y genera solo las líneas en las que grepno aparece. Sin -v, sería en el que las líneas de salida sólo grep no aparecerá. Ver man greppara más detalles.

En lo que respecta a la greputilidad en sí misma, no es importante que el patrón que se le greppasa como argumento sea el mismo que su nombre. Pero en la mayoría de los casos donde grep -v greprealmente 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 pscomando. 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 grepcomando 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

grepsin -Ftrata 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 xfcepero 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 grepincluso cuando no son el grepcomando que acaba de ejecutar usted mismo. Es posible que ni siquiera sean grepcomandos, 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.
Eliah Kagan
fuente
10
También vale la pena mencionar pgreppara otra alternativa aps | grep
La demanda del Fondo de Mónica el
8

grep --helpnos dice qué -vbandera hace:

-v, --invert-match        select non-matching lines

Puede usar la -vbandera para imprimir invierte la coincidencia; es decir, solo coincide con aquellas líneas que no contienen la palabra dada. Por ejemplo, imprima todas las líneas que no contienen la barra de palabras:

$ grep -v bar /path/to/file

( leer más ... )

Karlom
fuente