Unix 两个值之间的Grep字符串

Unix 两个值之间的Grep字符串,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我有一个json数据,如下所示。需要grep该值并将其导出到新文件中 { "Data": [ "User": [ {"Name": "Solomon", "Age":20}, {"Name": "Absolom", "Age":30}, ] "Country": [ {

我有一个json数据,如下所示。需要grep该值并将其导出到新文件中

{
"Data":
[
"User": [
      {"Name": "Solomon", "Age":20}, 
      {"Name": "Absolom", "Age":30}, 
   ] 
"Country": [
       {"Name" : "US", "Resident" : "Permanent"},
       {"Name" : "UK", "Resident" : "Temporary"}
]]}
预期结果

需要grep“User”的值并将其导出到新文件User.json

User.json

"User": [
        {"Name": "Solomon", "Age":20}, 
        {"Name": "Absolom", "Age":30}, 
   ]
再次需要grep“Country”并导出到Country.json

"Country": [
       {"Name" : "US", "Resident" : "Permanent"},
       {"Name" : "UK", "Resident" : "Temporary"}
]
Country.json

"Country": [
       {"Name" : "US", "Resident" : "Permanent"},
       {"Name" : "UK", "Resident" : "Temporary"}
]
正在尝试使用
sed
,但结果不正确

sed -e 's/.*"User"\(.*\)].*/\1/' Data.json > Users.json
由于有许多特殊字符
]/[/{/}
,因此无法确定如何正确地grep值并将其导出到新文件

{
"Data":
[
"User": [
      {"Name": "Solomon", "Age":20}, 
      {"Name": "Absolom", "Age":30}, 
   ] 
"Country": [
       {"Name" : "US", "Resident" : "Permanent"},
       {"Name" : "UK", "Resident" : "Temporary"}
]]}

任何建议都会非常有用

如果运气好,您可以使用GNU sed With
-z
选项,并过滤内容直到结束
]
假设字符串中没有
]

sed -z 's/.*\("User":[^]]*]\).*/\1\n/'
sed -z 's/.*\("Country":[^]]*]\).*/\1\n/'

您的输入不是有效的JSON,但是,对于解析JSON,您可以使用,例如,稍微修改您的输入,尝试以下方法:

 $ echo  '{
   "Data":[
      {
         "User":[
            {
               "Name":"Solomon",
               "Age":20
            },
            {
               "Name":"Absolom",
               "Age":30
            }
         ],
         "Country":[
            {
               "Name":"US",
               "Resident":"Permanent"
            },
            {
               "Name":"UK",
               "Resident":"Temporary"
            }
         ]
      }
   ]
}'| jq  -cr .'Data[] | with_entries(select(.key == "User"))';
它将输出(对于用户):

如果您将
|jq-cr.'Data[]|与_条目一起使用(选择(.key==“Country”)(适用于国家/地区)


这只是许多可能的方法中的一种,但我希望它能给您一个想法。

使用json感知工具提取json数据。使用
jq
。不,不能用sed编写json解析器。不,不想分割任何数据。我只需要grep并将其导出到一个新文件。另外,我不想使用
jq
,因为我的linux发行版没有
jq
,这不是一个有效的JSON值。数组不能有
“key:”value“
形式的元素。是的,它不是有效的JOSN,原因是,我只想grep所需的记录并导出到新文件好的,但问题主体说它是json,这是错误的,可能会产生误导。
sed-z
不起作用,我收到错误,因为
sed-z非法选项
确定,安装
GNU-sed
。您可以将输入中的所有换行符替换为某物,然后使用
sed
,然后将这些字符替换回换行符。而且,如果您使用的是BSD或OSX,最好在问题中指定您的环境。