Comment modifier la sortie dans le pipeline de commandes bash


10

Par exemple, j'ai obtenu de certaines commandes des lignes

$ some-command
John
Bob
Lucy

J'aimerais maintenant ajouter une commande de chaînage, qui modifie la sortie.

$ some-command | other-command
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

Comment écrire other-command? (Je suis novice en bash)

Réponses:


16

awk

$ some-command | awk '{print "Hi "$1" Bye"}'

sed

$ some-command | sed 's/\(.*\)/Hi \1 Bye/'

Exemples

En utilisant awk:

$ echo -e "John\nBob\nLucy" | awk '{print "Hi "$1" Bye"}'
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

En utilisant sed:

$ echo -e "John\nBob\nLucy" | sed 's/\(.*\)/Hi \1 Bye/'
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

Vous avez oubliésome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro

@kojiro - ne sentait pas le pastechemin aujourd'hui, merci 8-)
slm

5

Le code ci-dessous lit ligne après ligne, le stockant dans une variable LINE. A l'intérieur de la boucle, chaque ligne est réécrite sur la sortie standard, avec l'ajout de "Hi" et "Bye"

#!/bin/bash

while read LINE ; do
   echo "Hi $LINE Bye"  
done

4

Bash while loop et pipes:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.