将 date 与 sed 一起使用,并从 long 运行 命令重复输出

Using date with sed with repeated output from a long running command

我试图在我的 Mac (zsh) 上将 date/time 添加到长 运行 命令的输出中,但是 date/time 没有改变来自替换中使用的初始那个。

用例我从 Mac 程序“powermetrics”中打印出一个系统变量,通过 grep 过滤输出,然后使用 sed 插入 date/time 供以后分析。

命令是: sudo powermetrics --samplers thermal | grep --line-buffered "Current pressure" | sed "s/^/$(date '+%H:%M:%S') | /"

每 5 秒 powermetrics 打印出当前的热压水平,因此输出为:

12:37:59 | Current pressure level: Moderate
12:37:59 | Current pressure level: Moderate
12:37:59 | Current pressure level: Moderate
12:37:59 | Current pressure level: Moderate
12:37:59 | Current pressure level: Moderate

我想这并不奇怪,sed 只是使用从最初调用到 date 的模式,所以时间戳没有更新。

是否有 sed 的修饰符或可用于将日期正确附加到行首的替代方法?我用 awk 尝试过类似的事情,但出现了同样的问题。

Sed 只会评估日期命令一次。你可以使用 awk 来实现这个

sudo powermetrics --samplers thermal | grep --line-buffered "Current pressure" | gawk '{ print strftime("%Y-%m-%d %H:%M:%S |"), [=10=] }'

你也可以通过 awk

消除 grep 命令来缓冲行
sudo powermetrics --samplers thermal | gawk '/Current pressure/{ print strftime("%Y-%m-%d %H:%M:%S |"), [=11=] }'