Cada vez que ejecutamos un comando similar al siguiente, para ver el estado de un grupo de procesos, aparece el propio proceso grep estorbando en la salida:

root@debian:~# ps aux | grep "apache"
root      2507  0.0  0.0  82304  5584 ?        Ss   dic01   0:12 /usr/sbin/apache2 -k start
root     27017  0.0  0.0   7860   876 pts/0    S+   12:58   0:00 grep apache
www-data 29399  0.0  0.0  81668  3080 ?        S    dic04   0:00 /usr/sbin/apache2 -k start
www-data 29450  0.0  0.1 451232  8648 ?        Sl   dic04   0:55 /usr/sbin/apache2 -k start
www-data 29451  0.0  0.1 385724  8476 ?        Sl   dic04   0:54 /usr/sbin/apache2 -k start

Este artículo muestra un pequeño truco con expresiones regulares para hacerlo desaparecer.



El truco consiste en encerrar una letra (cualquiera) de la cadena a buscar entre corchetes. Por ejemplo:

root@debian:~# ps aux | grep "[a]pache"
root      2507  0.0  0.0  82304  5584 ?        Ss   dic01   0:12 /usr/sbin/apache2 -k start
www-data 29399  0.0  0.0  81668  3080 ?        S    dic04   0:00 /usr/sbin/apache2 -k start
www-data 29450  0.0  0.1 451232  8648 ?        Sl   dic04   0:55 /usr/sbin/apache2 -k start
www-data 29451  0.0  0.1 385724  8476 ?        Sl   dic04   0:54 /usr/sbin/apache2 -k start

En expresiones regulares, los corchetes ([ y ]) se utilizan para definir listas de caracteres para una posición específica (ver "Bracket Expressions" en el manual de ps). Por ejemplo, se podría utilizar la lista [abc] de la siguiente forma: "[abc]pache", para buscar coincidencias con las cadenas "apache", "bpache" y "cpache".

En este caso la lista posee un único caracter ([a]), por lo cual la expresión regular "[a]pache" resulta exactamente igual a buscar la cadena "apache".

¿Qué es lo que pasa entonces para que desaparezca el proceso grep?

La diferencia es que, al insertar corchetes, ya no hay coincidencias con la cadena "apache" en toda la línea de comando del proceso grep (incluyendo sus parámetros).

Para entender qué sucede, veamos la siguiente expresión regular (buscar tanto "apache" como "grep"):

root@debian:~# ps aux | grep "[a]pache\|grep"
root      2507  0.0  0.0  82304  5584 ?        Ss   dic01   0:12 /usr/sbin/apache2 -k start
root     27021  0.0  0.0   7856   896 pts/0    R+   12:58   0:00 grep [a]pache\|grep
www-data 29399  0.0  0.0  81668  3080 ?        S    dic04   0:00 /usr/sbin/apache2 -k start
www-data 29450  0.0  0.1 451232  8648 ?        Sl   dic04   0:55 /usr/sbin/apache2 -k start
www-data 29451  0.0  0.1 385724  8476 ?        Sl   dic04   0:54 /usr/sbin/apache2 -k start

Como la expresión regular es evaluada por grep y no por Bash, el parámetro en la línea del comando grep aparece de forma literal (tal como fue ingresado en la consola), lo cual es bastante lógico. Por ello ahora no aparece la cadena "apache" en la línea del comando grep.

Por supuesto, también funciona en sistemas FreeBSD:

emi@hal9000:~ % ps aux | grep nfs
root        744   0.0  0.0    8712    2164  -  Is   07:27     0:00.00 nfsuserd: master (nfsuserd)
root        745   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        746   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        747   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        748   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
emi        1656   0.0  0.0   14816    2468  2  S+   10:28     0:00.00 grep nfs
emi@hal9000:~ % ps aux | grep "nf[s]"
root        744   0.0  0.0    8712    2164  -  Is   07:27     0:00.00 nfsuserd: master (nfsuserd)
root        745   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        746   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        747   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)
root        748   0.0  0.0    8712    2168  -  S    07:27     0:00.00 nfsuserd: slave (nfsuserd)

Espero que les haya gustado.

Referencias

man grep


Tal vez pueda interesarte


Compartí este artículo