使用 tr 将换行符转换为 null 停止流输出

使用 tr 将换行符转换为 null 停止流输出

我正在使用杰克加上一些过滤来获取打印精美的 JSON 日志流,但我下面的内容没有输出。它只是挂着。

saw watch /aws/ecs/container-log \
| sed -e 's/^\[.*\] \(.*\)(.*)/\1/' \
| tr '\n' '\0' \
| xargs -0 -n1 jq .
>

saw watch流式传输容器日志,类似于tail -f log.file.我用来sed过滤掉时间戳和日志 ID,剩下的就是 JSON。

当我刚看完sed手表时,它正确地过滤掉了日志流的开头。

saw watch /aws/ecs/container-log \
| sed -e 's/^\[.*\] \(.*\)(.*)/\1/'
> {"data": "..."}

但是当我tr重新添加时,它再次挂起。

saw watch /aws/ecs/container-log \
| sed -e 's/^\[.*\] \(.*\)(.*)/\1/' \
| tr '\n' '\0'
>

然而,tr工作echo正常。

echo hey | hexdump -c
> 0000000   h   e   y  \n
> 0000004
echo hey | tr '\n' '\0' | hexdump -c
> 0000000   h   e   y  \0
> 0000004

可能是什么原因造成的?我该如何解决?

我在用着

  • zsh 5.8 (x86_64-apple-darwin19.3.0)
  • macOS 10.15.3
  • coreutils: stable 8.31 (通过brew安装)
  • 来自 coreutils 的 tr

我找不到 sed 的版本,但man sed已标记为BSD May 10, 2005.

相关内容