Como prefixo a saída da linha de comando com uma string fixa? [duplicado]

5

Suponha que eu execute o comando:

sudo ./list_members Physicians 

E eu quero prefixar a saída assim:

Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]

É possível prefixar o StdOutput assim?

    
por Ran Dom 23.07.2018 / 18:24

4 respostas

8

Sugiro que você use ts utility do pacote moreutils. Embora seu objetivo principal seja adicionar linhas de saída com um registro de data e hora, ele pode usar uma string arbitrária ao longo ou em vez do timestamp

for line in {01..05}; do echo $line; done | ts  "A string in front "
A string in front  01
A string in front  02
A string in front  03
A string in front  04
A string in front  05
    
por 23.07.2018 / 18:31
7

Use o s tream ed itor:

sudo ./list_members Physicians | sed 's/^/Physicians /'

Para torná-lo uma função auxiliar, você pode preferir awk :

prefix() { P="$*" awk '{print ENVIRON["P"] $0}'; }

sudo ./list_members Physicians | prefix 'Physicians '
    
por 23.07.2018 / 18:25
3

Você também pode fazer isso com awk :

$ sudo ./list_members | awk '{print "Physicians "$0}'
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]

Ou com xargs :

$ sudo ./list_members | xargs -n1  echo 'Physician'

Se você sabe que seu ./list_members estará incluindo mais de 1 argumento, você pode usar este xargs , que divide a entrada sendo alimentada a ele em \n :

$ sudo ./list_members | xargs -n1 -d $'\n' echo 'Physician'
Physician [email protected] xxx
Physician [email protected] yyy
Physician [email protected] zzz
Physician [email protected] aaa
    
por 23.07.2018 / 19:42
0

Usar o shell Bourne (ou BASH, que é um superconjunto) para fazer isso manterá a solução 100% POSIX:

sudo ./list_members | while read LINE; do echo "Prefix ${LINE}"; done
    
por 23.07.2018 / 20:57