如何在Shell管道中保留JSON日志的转义字符串?
解决JSON日志实时查看中转义字符丢失的问题
我太懂你这个痛点了——用tail -f结合read和echo处理JSON日志时,转义字符莫名其妙就丢了,好好的JSON结构直接被破坏。这其实是read和echo的默认行为在搞鬼,我来给你拆解问题并提供靠谱的解决方案:
问题根源
while read line里的read命令默认会解析转义字符:比如它会把JSON里的\"直接当成普通的",硬生生丢掉了转义信息。- 后续的
echo命令也会对字符串做额外处理,进一步破坏原本的转义结构,最终导致{"a":"\"Hello\""}变成{"a":""Hello""},让json工具根本没法正确解析。
修复后的命令
把你的命令改成下面这样,就能完美保留转义字符了:
tail -f path/to/logfile | while read -r line; do printf '%s\n' "$line" | json; done
关键改动说明
read -r:-r选项是核心,它会禁用read对转义字符的解析,让每一行内容完完整整被读取,原始的转义符号一个都不会少。printf '%s\n' "$line"代替echo:echo对转义字符的处理依赖于shell实现,行为特别不稳定;而printf是POSIX标准工具,能精准输出变量的原始内容,绝不会篡改转义字符。
你可以马上测试一下,现在再遇到包含转义字符串的JSON条目,json工具就能正确格式化输出,转义丢失的问题再也不会出现啦!
内容的提问来源于stack exchange,提问作者Philip Claren
相关产品推荐
相关产品推荐

