So ändern Sie die Ausgabe in der Bash-Befehlspipeline


10

Zum Beispiel habe ich von einem Befehl einige Zeilen bekommen

$ some-command
John
Bob
Lucy

Jetzt möchte ich einen Verkettungsbefehl hinzufügen, der die Ausgabe ändert.

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

Wie schreibe ich other-command? (Ich bin ein Anfänger in Bash)

Antworten:


16

awk

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

sed

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

Beispiele

Verwenden von awk:

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

Verwenden von sed:

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

Sie haben vergessensome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
Kojiro

@ Kojiro - fühlte pastesich heute nicht so, danke 8-)
slm

5

Der folgende Code liest Zeile für Zeile und speichert ihn in einer Variablen LINE. Innerhalb der Schleife wird jede Zeile mit "Hi" und "Bye" in die Standardausgabe zurückgeschrieben.

#!/bin/bash

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

4

Bash while-Schleife und Rohre:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.