Cuando reviso la lista de procesos y 'selecciono' aquellos que son interesantes para mí, el grepmismo también se incluye en los resultados. Por ejemplo, para enumerar terminales:
$ ps aux | grep terminal
user 2064 0.0 0.6 181452 26460 ? Sl Feb13 5:41 gnome-terminal --working-directory=..
user 2979 0.0 0.0 4192 796 pts/3 S+ 11:07 0:00 grep --color=auto terminal
Normalmente uso ps aux | grep something | grep -v greppara deshacerme de la última entrada ... pero no es elegante :)
¿Tiene un truco más elegante para resolver este problema (aparte de envolver todo el comando en un script separado, que tampoco está mal)

ps ux | awk '/name/ && !/awk/ {print $2}'grep -v grephaciendo la parte?grep -v grepexcluyegrepde resultados grep. Si grep se usa en combinación con ps, entonces también se mostrará el proceso grep (con argumentos grep), abarrotando sus resultados. grep -v grep es una forma común de evitar esoRespuestas:
La técnica habitual es esta:
Esto coincidirá con las líneas que contienen
terminal, loegrep '[t]erminal'que no. También funciona en muchos sabores de Unix.fuente
ps aux | grep '[r]oot'. ¿Alguien sabe por qué?| grep '[t]erminal'selecciona cualquier línea que contenga la palabra 'terminal' sin poner la palabra 'terminal' en la lista de procesos. ¿Con qué estás tratando de lograr| grep '[r]oot'y cómo no funciona? Es probable que haya una mejor solución.grep '[t]erminal'coincidirá con las líneas que contienenterminal. La salida deps auxtendrá una línea congrep '[t]erminal'(con corchetes), que no contiene la cadenaterminal(sin la misma).Usa pgrep . Es mas confiable.
fuente
pgrepno funcionaría si busco, por ejemplops aux | grep 'ssh options'pgrep -f?pgrepsolo coincide con el patrón con el nombre del proceso. Para hacer coincidir todo el comando, use la-fbandera.pgrepsolo devuelve ID de proceso.pgrep -fl(pero no podían ver el cmdline completo sin-fcoincidir con el cmdline completo, detalles: serverfault.com/a/619788/44183 ). Pero sí, si necesita otra información además de pid, cmdline, la necesitaps. Puede combinarlos:ps -p $(pgrep -f foo)Esta respuesta se basa en una
pgreprespuesta previa . También se basa en otra respuesta que combina el uso depsconpgrep. Aquí hay algunos ejemplos de capacitación pertinentes:Lo anterior se puede usar como una función :
Comparar con usar
pscongrep. La útil fila de encabezado no se imprime:fuente
-dopción de especificar un separador; Por ejemplops -fp$(pgrep -d , getty)ps uxp `pgrep <process>`cuenta quepdebe ser el último parámetro (es decir,puxno funcionará)Puede filtrar en el comando ps, por ejemplo
(o busque / proc con find, etc.)
fuente
ps -C <command>coincidirá con el comando exacto. Cuando se utiliza con losaoxlas opciones que reportará todos los procesos, puesa, yxla lista de procesos , además de la serie de procesos coincidentes por otros medios.logindparasystemd-logind, o para hacer coincidir argumentos.Una alternativa más :
Aquí las opciones:
fuente
-Cla opción ya fue sugerida en la respuesta de @Andreas Frishe publicada más de un año y medio antes ...El uso de corchetes para rodear un carácter en el patrón de búsqueda excluye el
grepproceso ya que no contiene la expresión regular coincidente.fuente
Descargo de responsabilidad: soy el autor de esta herramienta, pero ...
Yo usaría px :
Excepto para encontrar procesos con una interfaz de línea de comandos sensible, también hace muchas otras cosas útiles, más detalles en la página del proyecto .
Funciona en Linux y OS X, se instala fácilmente:
fuente
Dependiendo del caso de uso final, a menudo prefieres Awk en su lugar.
Esto es particularmente cierto cuando tienes algo como
donde obviamente la expresión regular se puede factorizar en la secuencia de comandos Awk trivialmente:
Pero en realidad, no reinventes esto tú mismo.
pgrepy amigos han existido por mucho tiempo y manejan todo este espacio problemático mucho mejor que la mayoría de las reimplementaciones ad hoc.fuente
Otra opción es editar su
.bash_profile(u otro archivo en el que mantenga los alias bash) para crear una función que elimine los resultados.El
grep -v greptiene que ser el primero de lo contrario su--color=autovoluntad no funciona por alguna razón.Esto funciona si estás usando bash; si está usando un shell diferente YMMV.
fuente
function grep { command grep -v grep | command grep --color=auto "$@"; }(también ten en cuenta la solución del argumento y la cita). Sin embargo, esto se rompe porque cualquier nopsinvocación degrepya no funcionará (los argumentos se pasan incorrectamente). De todos modos, una función mucho más útil sería aquella que modifica la expresión regular para que no coincida, en lugar de filtrargreplosgrepresultados por separado. Y, por supuesto, inventar nuevas soluciones a un problema que se resolvió adecuadamente hace décadas no es muy productivo.