Як змінити вихід у командному конвеєрі bash


10

Наприклад, я отримав від якоїсь команди кілька рядків

$ some-command
John
Bob
Lucy

Тепер я хотів би додати ланцюгову команду, яка змінює вихід.

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

Як писати other-command? (Я початківець в баші)

Відповіді:


16

awk

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

sed

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

Приклади

Використання awk:

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

Використання sed:

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

Ви забулиsome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro

@kojiro - не відчував pasteтак, як сьогодні, спасибі 8-)
slm

5

Код нижче читає рядок за рядком, зберігаючи його у змінній LINE. Всередині циклу кожен рядок записується до стандартного виводу з додаванням "Привіт" і "До побачення"

#!/bin/bash

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

4

Вставте при цьому петлю і труби:

echo -e "John\nBob\nLucy" | while read n; do echo "hi $n bye"; done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.