Строка grep между двумя значениями Unix - PullRequest
0 голосов
/ 09 июля 2020

У меня есть json данные, как показано ниже. Необходимо ввести значение grep и экспортировать его в новый файл.

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

Ожидаемый результат,

Необходимо найти значение «User» и экспортировать его в новый файл User. json

Пользователь. json

"User": [
        {"Name": "Solomon", "Age":20}, 
        {"Name": "Absolom", "Age":30}, 
   ]

И снова нужно ввести «Страна» и экспортировать в страну. json

Страна. json

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

Пытался использовать sed, но получаю неверные результаты

sed -e 's/.*"User"\(.*\)].*/\1/' Data.json > Users.json

Поскольку существует много специальных символов ]/[/{/}, не уверен, как правильно использовать grep для значения и экспортировать его в новый файл.

Любое предложение будет действительно полезным

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Если повезет, вы можете использовать GNU sed с опцией -z и фильтровать содержимое до закрытия ], предполагая, что в строках не будет ]:

sed -z 's/.*\("User":[^]]*]\).*/\1\n/'
sed -z 's/.*\("Country":[^]]*]\).*/\1\n/'
0 голосов
/ 09 июля 2020

Ваш ввод недействителен JSON, однако для синтаксического анализа JSON вы можете использовать jq , например, немного изменив ввод, попробуйте это:

 $ 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"))';

Будет выведено (для пользователя):

{"User":[{"Name":"Solomon","Age":20},{"Name":"Absolom","Age":30}]}

И если вы используете | jq -cr .'Data[] | with_entries(select(.key == "Country"))'; (для страны)

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

Это только один из многих способов возможно, но я надеюсь, что это даст вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...