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)

Métier à tisser
la source

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
slm
la source
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
brm
la source
4

Bash while loop et pipes:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
OneOfOne
la source