刷新 sed 内的命令

Ste*_*Snu 2 bash shell scripting sed

里面的日期命令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
Run Code Online (Sandbox Code Playgroud)

但我越来越

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

Jon*_*Jon 5

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

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

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

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