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. 타임스탬프와 로그 ID를 필터링하는 데 사용되었으며 sed남은 것은 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)
  • 맥OS 10.15.3
  • coreutils: stable 8.31(brew를 통해 설치)
  • coreutils의 tr

sed 버전을 찾을 수 없지만 man sed태그가 지정되어 있습니다 BSD May 10, 2005.

관련 정보