Cuando se usa grep
así:
ps aux | grep 'processname' | awk '{print $2}'
Se devuelve el PIDs
de los procesos con . processname
Al usar esto:
ps aux | grep '^processname' | awk '{print $2}'
Estoy intentando obtener procesos con los que comienza la línea de comando processname
, pero no funciona.
Procesos de ejemplo en ejecución:
processname
other_processname
Me gustaría obtener PID
la primera opción, porque processname
es el inicio del comando.
También intenté usar las -E, -e, -w
banderas y todas devuelven el mismo resultado. ¿Qué es incorrecto?
Respuesta1
^
marca el inicio de una línea, no de un campo.
ps aux | grep ' processname'
se acercará, pero aún así podría dar algunos falsos positivos.
Dado que el ancho de las otras columnas es fijo, también puedes usar
grep '^.\{65\}processname'
Aquí ^.\{65\}
hay exactamente 65 caracteres desde el inicio de la línea. El número exacto puede variar en su sistema.
Como ya estás usando awk, esta probablemente sería una mejor opción:
ps aux | awk '{ if ($11 == "processname") print $2 }'
También puedes reformatear la salida de ps para facilitar el grepping:
ps ax -o pid,args | grep '^[^ ]\+ processname'
El modificador -o pid,args
hace que ps muestre solo el PID y el comando con argumentos. La expresión ^[^ ]\+
coincide con todos los caracteres desde el inicio de la línea hasta el primer espacio.