这是我的 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确定的值替换数字
23
和 46
我真的想将其保留在一行中 - 不在多行中使用 bash 变量,将其保留在 jq 内。
使用正则表达式:
.foo[].bar.second
| (.key1 | capture("delimiter1(?<v>.*)delimter2").v)
, .key2