Awk

返回對應括號之間的內容

  • May 13, 2022

我有一個包含所有類型括號的文件{}[]()- 適當地嵌套、打開和關閉。我想在字元串 ( text:) 之後返回匹配方括號內的內容。該文件的內容如下所示:

.... 

{
   "text": [
       {
           "string1": ["hello", "world"],
           "string2": ["foo", "bar"]
       },
       {
           "string1": ["alpha", "beta"],
           "string2": ["cat", "dog"]
       }
   ],
   "unwanted": [
       {
           "stuff": ["nonesense"]
       }
   ]
}
.... and so on

我想回來

{
   "string1": ["hello", "world"],
   "string2": ["foo", "bar"]
},
{
   "string1": ["alpha", "beta"],
   "string2": ["cat", "dog"]
}

該文件是json類型,並且自始至終具有相似的結構。我想在text:具體之後返回方括號中的內容。

您提供的不是有效的 JSON。將表達式括起來,修正其他錯誤,並添加一個反例:

{
   "text": [
       {
           "string1": ["hello", "world"],
           "string2": ["foo", "bar"]
       },
       {
           "string1": ["alpha", "beta"],
           "string2": ["cat", "dog"]
       }
   ],
   "unwanted": [
       {
           "stuff": ["nonesense"]
       }
   ]
}

您可以使用 JSON 解析器來解析它,例如jq. 例如,這將挑選出text數組:

jq -c '.text[]'

{"string1":["hello","world"],"string2":["foo","bar"]}
{"string1":["alpha","beta"],"string2":["cat","dog"]}

或者

jq '.text[]'

{
 "string1": [
   "hello",
   "world"
 ],
 "string2": [
   "foo",
   "bar"
 ]
}
{
 "string1": [
   "alpha",
   "beta"
 ],
 "string2": [
   "cat",
   "dog"
 ]
}

這些在語法上是相同的;只是佈局略有不同。

引用自:https://unix.stackexchange.com/questions/702412