如何使用固定字符串作为命令行输出的前缀?

Ran*_*Dom 8 shell stdout mailman

假设我运行命令:

sudo ./list_members Physicians 
Run Code Online (Sandbox Code Playgroud)

我想像这样为输出添加前缀:

Physicians user@domain.com
Physicians user2@domain.com
Physicians user3@domain.com
Physicians user4@domain.com
Run Code Online (Sandbox Code Playgroud)

我可以像这样为 StdOutput 添加前缀吗?

Tag*_*int 10

我建议您使用tsmoreutils 包中的实用程序。虽然它的主要目的是在输出行前面加上时间戳,但它可以使用任意字符串或代替时间戳

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
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 8

使用小号tream ED itor:

sudo ./list_members Physicians | sed 's/^/Physicians /'
Run Code Online (Sandbox Code Playgroud)

为了使它成为辅助函数,您可能更喜欢awk

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

sudo ./list_members Physicians | prefix 'Physicians '
Run Code Online (Sandbox Code Playgroud)

如果您想同时为 stdout 和 stderr 加上前缀,可以通过以下方式完成:

{
  sudo ./list_members Physicians 2>&1 >&3 3>&- |
   prefix 'Physicians ' >&2 3>&-
} 3>&1 | prefix 'Physicians '
Run Code Online (Sandbox Code Playgroud)