Jak zmodyfikować dane wyjściowe w potoku poleceń bash


10

Na przykład dostałem z jakiegoś polecenia kilka wierszy

$ some-command
John
Bob
Lucy

Teraz chciałbym dodać polecenie łańcuchowe, które modyfikuje dane wyjściowe.

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

Jak pisać other-command? (Jestem nowicjuszem w bash)

Odpowiedzi:


16

awk

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

sed

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

Przykłady

Używanie awk:

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

Używanie sed:

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

Zapomniałeśsome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro

@kojiro - nie czułam się pastedzisiaj tak, dzięki 8-)
slm

5

Poniższy kod odczytuje wiersz po wierszu, przechowując go w zmiennej LINE. Wewnątrz pętli każda linia jest zapisywana z powrotem na standardowe wyjście, z dodatkiem „Cześć” i „Cześć”

#!/bin/bash

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

4

Bash while loop i potoki:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.