在管道命令之前添加标准输出前缀

在管道命令之前添加标准输出前缀

在 Linux(Debian)上,如何在将命令的标准输出传送到第二个命令之前在其前面加上一行或几行前缀?

这是使用 sendmail 邮寄命令的输出,如下所示:

pflogsumm <args> | sendmail <address>

我无法通过这种方式指定主题行,因为 sendmail 从输入中提取标头字段。因此,我想使用 sed 为 pflogsumm 输出添加前缀。

谢谢。

/大卫

答案1

您可以使用子 shell。您可以发送任何您想要的输出,它们都会通过管道传出去。

(cat /foo ; echo bar ; pflogsumm <args> ) | sendmail <address>

答案2

awk会做你想做的事。

例如

# ps | awk ' { if (NR == 1) printf("Line 1\nLine 2\n"); print; }'
Line 1
Line 2
  PID TTY          TIME CMD
23071 pts/0    00:00:00 bash
25655 pts/0    00:00:00 ps
25656 pts/0    00:00:00 awk

上面的代码在输出之前添加了 printf 字符串前缀。

你的例子是

pflogsumm <args> | awk ' { if (NR == 1) printf("Line 1\nLine 2\n"); print; }' | sendmail <address>

相关内容