Bash:在不使用"ts"的情况下为日志添加时间戳前缀



我有一个bash命令,它会随着时间的推移打印大量内容。现在我想在每一行之前添加当前时间戳作为前缀。我知道存在";ts";图书馆的命令";moreutils";。不幸的是我不能用它。还有其他简单的方法吗?

我目前的想法是使用";sed";与";日期";命令它看起来很好,但问题是时间戳不会改变。

./echo_hello_every_second.sh | sed -e "s/.*/$(date '+%F %H:%M:%N: ')&/"
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello
2022-08-01 15:59:443158143: Hello

有没有办法强制重新执行";时间";命令在";sed";每一条新的输入线?

我也愿意接受其他建议。

如果您有GNUsed(用于e命令(,并且输入行不包含单个quot:

while :; do echo Hello; sleep 1; done |
sed -e "s/.*/printf '%s: %s\\n' "$(date '+%F %H:%M:%S.%N')" '&'/" -e e

如果它们可以包含单引号,那么

while :; do echo Hello; sleep 1; done |
sed -e "s/'/'\\''/g" 
-e "s/.*/'&'/"     
-e "s/^''//"       
-e "s/''$//"       
-e 's/^/printf "%s: %s\n" "$(date "+%F %H:%M:%S.%N")" /' 
-e e

简单的bash解决方案要简单得多:

while :; do echo Hello; sleep 1; done |
while IFS= read -r line; do
printf '%s: %sn' "$(date '+%F %H:%M:%S.%N')" "$line"
done

相关内容

最新更新