Bash: La expresión regular Grep no funciona

Bash: La expresión regular Grep no funciona

Cuando se usa grepasí:

ps aux | grep 'processname' | awk '{print $2}'

Se devuelve el PIDsde los procesos con . processnameAl 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 PIDla primera opción, porque processnamees el inicio del comando.

También intenté usar las -E, -e, -wbanderas 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,argshace 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.

información relacionada