bash - 刷新sed里面的命令
问题描述
里面的 date 命令sed
不会在每一行上更新。
我正在尝试学习sed
脚本的其他基本命令。在此示例中,我尝试在 ping 时间旁边附加一个时间戳(另一个用户在上一个问题中提供的解决方案),但该date
命令似乎并未在每一行上更新。我试图阅读有关sed
选项的信息,但到目前为止我的所有尝试都没有结果
ping 8.8.8.8 | sed --unbuffered "s/.*time=\([0-9\.]*\).*/\1 $(date +%T)/"
我期待着
85.2 10:59:26
140 10:59:27
231 10:59:28
97.7 10:59:29
117 10:59:30
80.9 10:59:31
但我越来越
85.2 10:59:26
140 10:59:26
231 10:59:26
97.7 10:59:26
117 10:59:26
80.9 10:59:26
解决方案
问题是$(date)
仅在 shell 运行之前评估一次sed
。如果您希望它每次都运行,请尝试替换e
选项。sed
这是对sed
.
$ ping 8.8.8.8 | sed --unbuffered 's/.*time=\([0-9\.]*\).*/echo \1 $(date +%T)/e'
或者,如果您想避免echo
and $()
:
$ ping 8.8.8.8 | sed --unbuffered 's/.*time=\([0-9\.]*\).*/date "+\1 %T"/e'