GNU/Linux >> Tutoriels Linux >  >> Linux

Passer la sortie de la commande précédente à la suivante en tant qu'argument ?

J'ai une commande qui envoie des données à stdout (command1 -p=aaa -v=bbb -i=4 ).
La ligne de sortie peut avoir la valeur suivante :

rate (10%) - name: value - 10Kbps

Je veux grep cette sortie afin de stocker ce "taux" (je suppose que le tuyau sera utile ici).
Et enfin, je voudrais que ce taux soit une valeur d'un paramètre sur une deuxième commande (disons command2 -t=${rate} )

Cela semble être délicat de mon côté; J'aimerais mieux savoir comment utiliser pipes, grep, sed, etc.

J'ai essayé beaucoup de combinaisons comme celle-ci, mais je ne comprends pas celles-ci :

$ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2>&1 command2 -t="rate was "${rate}

Réponse acceptée :

Vous confondez deux types d'entrées très différents.

  1. Saisie standard (stdin )
  2. Arguments de la ligne de commande

Ceux-ci sont différents et sont utiles à des fins différentes. Certaines commandes peuvent recevoir des entrées dans les deux sens, mais elles les utilisent généralement différemment. Prenons par exemple le wc commande :

  1. Passer l'entrée par stdin :

    ls | wc -l
    

    Cela comptera les lignes dans la sortie de ls

  2. Passer l'entrée par des arguments de ligne de commande :

    wc -l $(ls)
    

    Cela comptera les lignes dans la liste des fichiers imprimé par ls

Des choses complètement différentes.

Pour répondre à votre question, il semble que vous souhaitiez capturer le taux à partir de la sortie de la première commande, puis utiliser le taux comme argument de ligne de commande pour la deuxième commande. Voici une façon de procéder :

rate=$(command1 | sed -ne 's/^rate..([0-9]*)%.*/1/p')
command2 -t "rate was $rate"

Explication du sed :

  • Les s/pattern/replacement/ commande est de remplacer un motif
  • Le modèle signifie :la ligne doit commencer par "taux" (^rate ) suivi de deux caractères (.. ), suivi de 0 ou plusieurs chiffres, suivi d'un % , suivi du reste du texte (.* )
  • 1 dans le remplacement signifie le contenu de la première expression capturée dans (...) , donc dans ce cas les chiffres avant le % signer
  • Le -n drapeau du sed commande signifie ne pas imprimer de lignes par défaut. Le p à la fin des s/// commande signifie imprimer la ligne s'il y avait un remplacement. En bref, la commande n'imprimera quelque chose que s'il y avait une correspondance.

Linux
  1. Comment passer la sortie d'une commande comme argument à une autre ?

  2. Comment accéder au dernier argument d'une commande commentée ?

  3. Comment puis-je rappeler l'argument de la commande bash précédente ?

  4. Comment ajouter la sortie à un fichier ?

  5. Comment passer un argument dans Expect via la ligne de commande dans un script shell

Passer les arguments de la ligne de commande au script Bash ?

Rediriger la sortie d'une commande dans 'time Command' ?

Rechercher du texte sur la sortie du terminal ?

Enregistrer la sortie d'une commande du terminal Debian dans un fichier

Comment lire la colonne IDLE dans la sortie de la commande Linux 'w' ?

Masquer la sortie d'une commande shell uniquement en cas de succès ?