Unix sed/grep/awk:匹配txt中的json对象
我需要从控制台输出中提取json,如下所示:Unix sed/grep/awk:匹配txt中的json对象,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我需要从控制台输出中提取json,如下所示: [main] Lin of log 1 [main] Lin of log 2 ... [main] Lin of log n { "jsonProperty1": "aString", "jsonNestedObject1": { ... }, ... "jsonPropertyN": "somethin
[main] Lin of log 1
[main] Lin of log 2
...
[main] Lin of log n
{
"jsonProperty1": "aString",
"jsonNestedObject1": {
...
},
...
"jsonPropertyN": "something"
}
[main] Lin of log n+1
...
[main] Lin of log m
我想把这个JSON对象写在一个“input.JSON”文件中,我如何使用awk、grep或sed等命令来实现呢
提前感谢您的帮助请尝试以下操作:
awk '/^{$/{f=1}f{print; if(/^\}$/) f=0}' input > input.json
说明:当找到
{
时,设置了f
。使用f
时,将打印正确的行,但如果找到}
,f
将取消设置,并停止打印。如需进一步阅读,请查看以下sed解决方案:
sed -n '/{/,/^}/p' input > input.json
这句话的意思是“一般情况下,不要打印任何内容,但从一行开头的第一个开始括号到第一个结束括号,打印所有内容。”我不知道为什么我会被否决,我认为更具建设性的做法是解释为什么你认为这个问题不好,请发表评论:)欢迎这么做!请向我们展示您迄今为止所做的尝试。顺便说一句,不是我的反对票。那里有很多省略号。“thisJSON对象”是指大括号和它们之间的文本吗?这些是源代码中唯一的大括号吗?那个街区里可能有花括号吗?如果源代码中还有其他JSON对象,您能告诉我们这一个与其他JSON对象的区别吗?@ThomasHansen谢谢!我不是一个shell编程专家,所以我做了一些研究,但是我找到的解决方案没有被采纳。我得到的最接近的是
awk'/{/,/}/'
,但我不知道为什么,它直到最后才匹配。我试过的其他方法都是一团糟,只匹配括号,而不是括号之间的文本:/@Beta谢谢你的精确性,是的,JSON对象我指的是括号和括号之间的文本,它们是源代码中唯一的花括号,它们是该块中的其他花括号,这是源代码中唯一的JSON。我试着在我的例子中尽可能地理解它,如果不够精确的话,很抱歉:)它完全有效!非常感谢你!你能解释一下这个是怎么工作的吗?很高兴听你这么说。我已经更新了一个解释。请考虑接受答案,完成了,非常感谢您的帮助!非常感谢你!有什么理由选择一种方案高于另一种方案,或者完全一样吗?@VirgilePetermann:有几个好的标准可以参考;在这种情况下,我认为您应该选择似乎更容易理解和使用的解决方案。