Como modificar a saída no pipeline de comando bash

10

Por exemplo, obtive de algum comando algumas linhas

$ some-command
John
Bob
Lucy

Agora eu gostaria de adicionar o comando encadeamento, que modifica a saída.

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

Como escrever other-command? (Eu sou um novato na festança)

Tear
fonte

Respostas:

16

awk

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

sed

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

Exemplos

Usando awk:

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

Usando sed:

$ echo -e "John\nBob\nLucy" | sed 's/\(.*\)/Hi \1 Bye/'
Hi John Bye
Hi Bob Bye
Hi Lucy Bye
slm
fonte
Você esqueceusome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro
@kojiro - não estava sentindo a pasteforma como hoje, graças 8-)
SLM
5

O código abaixo lê linha após linha, armazená-lo na variável LINE. Dentro do loop, cada linha é gravada de volta na saída padrão, com a adição de "Hi" e "Bye"

#!/bin/bash

while read LINE ; do
   echo "Hi $LINE Bye"  
done
brm
fonte
4

Bash while loop e pipes:

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