Come modificare l'output nella pipeline dei comandi bash


10

Ad esempio, da alcuni comandi ho ricevuto alcune righe

$ some-command
John
Bob
Lucy

Ora vorrei aggiungere il comando concatenamento, che modifica l'output.

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

Come scrivere other-command? (Sono un novizio a Bash)

Risposte:


16

awk

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

sed

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

Esempi

Utilizzando awk:

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

Utilizzando sed:

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

Hai dimenticatosome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro,

@kojiro - oggi non mi sentivo in questo pastemodo, grazie Cool
slm

5

Il codice seguente legge riga dopo riga, memorizzandolo in variabile LINE. All'interno del ciclo, ogni riga viene riscritta nell'output standard, con l'aggiunta di "Ciao" e "Ciao"

#!/bin/bash

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

4

Bash mentre loop e tubi:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.