有没有办法提取分隔符之间的键值部分?

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

这是我的 JSON。它位于一个名为

file1.txt

的文件中

{
    "foo": [
        {
            "bar": {
                "second": {
                    "key1": "some/path/to/delimiter1_FIRST_IMPORTANT_VALUE_delimter2",
                    "key2": "OK_as_it_is",
                    "key3": "Just to show there is more stuff"
                }
            }
        },
        {
            "bar": {
                "second": {
                    "key1": "some/path/to/delimiter1_SECOND_IMPORTANT_VALUE_delimter2",
                    "key2": "Also_OK_as_it_is",
                    "key3": "Just to show there is more stuff"
                }
            }
        }
    ]
}

我想要做的是提取

key1
值的一部分 -
delimiter1
delimiter2
之间的位,即 _FIRST_IMPORTANT_VALUE__SECOND_IMPORTANT_VALUE_

我知道以下方法几乎有效:

cat file1.txt | jq '.foo[].bar.second | (.key1[23:46]),  .key2'
"_FIRST_IMPORTANT_VALUE_"
"OK_as_it_is"
"_SECOND_IMPORTANT_VALUE"
"Also_OK_as_it_is"

...但正如您所看到的,它错过了 _SECOND_IMPORTANT_VALUE_

的最后一个字符

所以我需要更通用的

jq '.foo[].bar.second | (.key1[23:46]),  .key2'
形式,用由
delimiter1
delimiter2
确定的值替换数字 2346

我真的想将其保留在一行中 - 不在多行中使用 bash 变量,将其保留在 jq 内。

jq
1个回答
0
投票

使用正则表达式:

.foo[].bar.second
| (.key1 | capture("delimiter1(?<v>.*)delimter2").v)
, .key2
© www.soinside.com 2019 - 2024. All rights reserved.