我有一个有80多个字段的JSON。当使用jq提取下面提到的JSON文件中的消息字段时,我得到了换行符和制表符。我想删除转义序列字符,我已经尝试使用sed,但它不起作用。
示例JSON文件:
{
"HOSTNAME":"server1.example",
"level":"WARN",
"level_value":30000,
"logger_name":"server1.example.adapter",
"content":{"message":"ERROR LALALLA\nERROR INFO NANANAN\tSOME MORE ERROR INFO\nBABABABABABBA\n BABABABA\t ABABBABAA\n\n BABABABAB\n\n"}
}
有人能帮我吗?
3条答案
按热度按时间bqucvtff1#
A纯溶液:
如果要保留包含的
"
字符,请忽略-r
。注:peak's helpful answer包含一个 generalized 正则表达式,它通过Unicode category specifier、
\p{Cc}
匹配ASCII和Latin-1 Unicode范围内的 * 所有 * 控制字符。jq
使用Oniguruma regex引擎。其他解决方案,使用附加实用程序,如
sed
和tr
。使用
sed
无条件删除转义序列\n
和t
:请注意,封闭的
"
仍然存在,但是要删除它们,请在sed
命令中添加另一个替换:一个更简单的选项,它也会删除封闭的
"
(注意:输出没有尾随\n
):注意
-r
是如何被用来使jq
* 内插 * 字符串(扩展\n
和\t
序列),然后tr
将其作为常量移除。rdrgkggo2#
你的输入,下面的咒语:
产生:
当然,上面的调用只是说明性的:
walk/1
(walk/1
遍历输入JSON)。gsub/2
调用的管道。gsub/2
的第二个参数。如果你确实想使用
walk/1
,但是你的jq没有它,那么在调用它之前简单地添加它的定义(很容易在web上获得,比如here)。nwlls2ji3#
使用jqv1.6可以实现以下功能