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 -ooption. 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 scommande, 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' -noption pour désactiver l'impression par défaut et mettez le pmodificateur 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/')"