Je dois extraire un certain numéro de port issu d’une commande de statut de processus (ps) et je ne suis pas sûr de savoir comment l’obtenir.
Par exemple, si j’avais cette ligne (ps -ef | grep “blahblahblah”):
xxremote -xcom.xx.management.xremote.port=9999 -xcom.xx.management.xxxremote.ssl=false
Comment puis-je extraire le nombre “9999”? Remarque: Ceci est une partie d’une ligne très longue, et je ne peux pas utiliser, par exemple, awk, pour compter le nombre de champs après le signe “=”. Le nombre de signes changera.
J’ai essayé d’utiliser la commande cut mais je ne sais que l’utiliser avec des délimiteurs à un seul caractère, ce qui n’est pas ce dont j’ai besoin. Je pensais que peut-être awk ou sed ferait le tour? Je ne les connais pas. Merci beaucoup pour l’aide
ps -ef | grep “blahblahblah” “| awk …. (ou sed)
UPDATE: Clarification du fait que le numéro de port doit être extrait d’une longue ligne de texte et que l’utilisation d’une commande awk n’est pas requirejse.
ps -ef | sed -n '/blahblahblah/s/^.*port=\([[:digit:]]\+) .*/\1/p'
Cela le fera:
( mis à jour pour ne filtrer que les lignes contenant xremote.port=
si les données ne sont pas encore filtrées)
ps -elf | awk -F= '/xremote.port=/{print $2}' | awk '{print $1}'
La première commande awk
divise la ligne =
résultant en ce que le 2ème champ est:
9999 -xcom.xx.management.xxxremote.ssl
la deuxième commande awk
saisit le premier champ de ce qui est votre numéro.
9999
Dois-tu utiliser Awk? sed
serait un meilleur choix …
Tant pis…
ps -ef | awk '/blahblahblah/ { sub(".*port=", "") sub(" .*", "") print $0 }'
La commande sub(a, b)
dans awk substitue l’expression régulière a
par la chaîne b
(qui se trouve être vide dans mon cas. Il prend $ 0 qui représente la ligne retournée.
Comme je l’ai dit, sed
serait plus simple:
ps -ef | sed -n '/blahblahblah/s/^.*port=\([^ ]*\).*/\1/p'
Notez que j’utilise sed
pour sélectionner la ligne blahblahblah et effectuer la substitution.