如何正则表达式匹配不包含一组子字符串的字符串[重复]

问题描述 投票:0回答:1

我正在查看 1000 个 JSON 文件,所有这些文件都有这样的属性:

"value": {some number}

我想 grep 所有这些 JSON 文件,并匹配

value
不等于
1
2
3
的所有情况。那么如果
"value": 10
呢? Grep 应该返回该信息。
"value": 1
? Grep 不应该返回该内容。

我能得到的最好的正则表达式是

.*\"value\": ((?!1)|(?!2)|(?!3))
但是我一定不知道足够多的负前瞻来正确使用它,我接近了吗?有没有更好的方法在正则表达式中进行 NOT 操作?

匹配不包含单词的行的正则表达式是我找到的最接近的答案,但我不知道如何将其应用于我有一组子字符串的情况。

regex regex-lookarounds regex-negation
1个回答
0
投票

输入文件:

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 文件。

© www.soinside.com 2019 - 2024. All rights reserved.