-2

Lets say I have this in the same file:

{
  "city": "NY",
  "car": "ford",
  "whatever": "whatever",
  "whatever": "whatever",
  "day": "friday",
  "mood": "good",
  "whatever": "whatever",
  "whatever": "whatever",
}
{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "whatever": "whatever",
  "whatever": "whatever",
  "whatever": "whatever",
  "mood": "good",
  "whatever": "whatever",
}

How can I grep only that record in which I have "day": "monday"? I've have actually tried a lot of different ways, for example grep -Po '{[^*]+\n.+day\": \"monday.+[^*]}' So eventually I want to get this:

{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "whatever": "whatever",
  "whatever": "whatever",
  "whatever": "whatever",
  "mood": "good",
  "whatever": "whatever",
}
Jason Aller
  • 3,541
  • 28
  • 38
  • 38
Viacheslav On
  • 73
  • 1
  • 7

1 Answers1

0

Try to use jq to parse the JSON file, for example having this file:

[{
    "city": "NY",
    "car": "ford",
    "whatever": "whatever",
    "day": "friday",
    "mood": "good"
}, {
    "whatever": "whatever",
    "city": "NY",
    "car": "ford",
    "day": "monday",
    "mood": "good"
}]

If you just want to get the dictionary having the day equal to monday:

jq '.[] |  select(.day | contains("monday"))' file.json

It will return:

{
  "whatever": "whatever",
  "city": "NY",
  "car": "ford",
  "day": "monday",
  "mood": "good"
}
nbari
  • 25,603
  • 10
  • 76
  • 131