我正在查看 1000 个 JSON 文件,所有这些文件都有这样的属性:
"value": {some number}
,
我想 grep 所有这些 JSON 文件,并匹配
value
不等于 1
、2
或 3
的所有情况。那么如果"value": 10
呢? Grep 应该返回该信息。 "value": 1
? Grep 不应该返回该内容。
我能得到的最好的正则表达式是
.*\"value\": ((?!1)|(?!2)|(?!3))
但是我一定不知道足够多的负前瞻来正确使用它,我接近了吗?有没有更好的方法在正则表达式中进行 NOT 操作?
匹配不包含单词的行的正则表达式是我找到的最接近的答案,但我不知道如何将其应用于我有一组子字符串的情况。
与jq:
cat file.json
[
{
"value": 1
},
{
"value": 2
},
{
"value": 3
},
{
"value": 4
},
{
"value": 5
},
{
"value": 6
},
{
"value": 7
}
]
jq '.[] | select( .value != 1 and .value != 2 and .value != 3 )' file.json
{
"value": 4
}
{
"value": 5
}
{
"value": 6
}
{
"value": 7
}
也适用于多个 JSON 文件。