La première tâche consiste à extraire le taux de cette ligne. Avec GNU grep (Linux non intégré ou Cygwin), vous pouvez utiliser cette -o
option. La partie que vous voulez est celle qui ne contient que des chiffres et suivie d'un %
signe. Si vous ne souhaitez pas extraire le fichier%
lui - même, vous avez besoin d'une astuce supplémentaire: une assertion de type lookahead de largeur nulle , qui ne correspond à rien, mais uniquement si rien n'est suivi de %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Une autre possibilité est d'utiliser sed. Pour extraire une partie d'une ligne dans sed, utilisez la s
commande, avec une expression rationnelle qui correspond à toute la ligne (en commençant par ^
et se terminant par $
), avec la partie à conserver dans un groupe ( \(…\)
). Remplacez toute la ligne par le contenu du ou des groupes à conserver. En général, passez l' -n
option pour désactiver l'impression par défaut et mettez le p
modificateur pour imprimer les lignes où il y a quelque chose à extraire (ici, il n'y a qu'une seule ligne, donc cela n'a pas d'importance). Voir Renvoyer uniquement la partie d'une ligne après un motif correspondant et Extraire une expression rationnelle associée à 'sed' sans imprimer les caractères environnants pour obtenir des astuces plus détaillées.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
Encore plus flexible que sed, c'est génial. Awk exécute les instructions pour chaque ligne dans un petit langage impératif. Il existe de nombreuses façons d'extraire le taux ici; Je sélectionne les deuxièmes champs (les champs sont délimités par des espaces blancs par défaut) et supprime tous les caractères qui ne sont pas des chiffres.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
La prochaine étape, maintenant que vous avez extrait le taux, consiste à le passer comme argument command2
. L'outil pour cela est un susbtitution de commande . Si vous mettez une commande à l'intérieur $(…)
(dollar-parenthesis), sa sortie est substituée dans la ligne de commande. La sortie de la commande est divisée en mots séparés à chaque bloc d'espaces, et chaque mot est traité comme un motif générique. sauf si vous voulez que cela se produise, utilisez des guillemets autour de la substitution de commande: "$(…)"
. Avec les guillemets doubles, la sortie de la commande est utilisée directement en tant que paramètre unique (la seule transformation est que les nouvelles lignes à la fin de la sortie sont supprimées).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"