首页 > 解决方案 > 刷新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

标签: bashshellsedscripting

解决方案


问题是$(date)仅在 shell 运行之前评估一次sed。如果您希望它每次都运行,请尝试替换e选项。sed这是对sed.

$ ping 8.8.8.8 | sed --unbuffered  's/.*time=\([0-9\.]*\).*/echo \1 $(date +%T)/e'

或者,如果您想避免echoand $()

$ ping 8.8.8.8 | sed --unbuffered  's/.*time=\([0-9\.]*\).*/date "+\1 %T"/e'

推荐阅读