[linux-leman] truc et astuce: filtrer la commande ps
Félix Hauri
felix at f-hauri.ch
Thu Apr 17 11:39:26 CEST 2003
Au début je m'énervais à faire ``grep -v grep'' pour reperer une tâche
précise (lorsque ``ps -C'' ne marche pas) :
$ ps ax | grep X\ | grep -v grep | sed -e s/^\ *// -e s/\ .*$//
(lorsque
$ ps -C X o pid=
ne marche po;)
Je me d'abord dit: Il y a au moins un grep de trop!
puis: Bon sang, mais c'est bien sûr!
$ ps ax | grep [0-9][^\\\]]*X\ | sed -e s/^\ *// -e s/\ .*$//
Ce grep là refusera les lignes dans lequelles un chiffre sera séparé par
une fermeture de crochet du X majuscule suivit d'un espace, recherché.
Du coup, comme je suis en bash, je peux aussi me passer du sed pour faire
mon ``parsing'' (séparation des notions).
$ set -- $( ps ax | grep [0-9][^\\\]]*X\ )
$ echo $1
ou mieux: (on s'accroche;)
$ set -- $(ps ax o pid=,lstart=,etime=,cmd=|grep [0-9][^\\\]]*X\ )
$ [ "$1" ] && \
fmt="Identite\t: %s,\nD\351marr\351 \t: %s %s %s %s \340 %s," && \
fmt="$fmt\nsoit depuis\t: %s\nCommande\t: %s \n" && \
printf "$fmt" \
$1 \
$( export LC_ALL=fr_CH;
date -d "$(echo ${@:2:5})" +"%a %d %b %Y %T") \
"$( echo $7 | \
sed -e \
s/\\\([0-9][0-9]\\\):\\\([0-9][0-9]\\\)$/\\1mins\ et\ \\2secs./ \
-e s/:/hres,\ / -e s/-/jours,\ /)" "${*:8:999}"
(Rappel: le ``$'' en début de ligne signifie ``shell usermode''
par opposition à ``#'' pour ``root shell''.
A ne pas copier-coller ;-)
Pour générer les accentués, j'utilise ``printf''.
Notez l'absence de guillemets pour la date par opposition au
champ temps écoulé (qui lui est de longueur variable) juste après.
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list