Here is my JSON. Its in a file called 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"
}
}
}
]
}
What I want to do is extract PORTION of the key1 value - the bits between delimiter1 and delimiter2 which would be _FIRST_IMPORTANT_VALUE_ and _SECOND_IMPORTANT_VALUE_
I know that the following ALMOST works:
$ 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"
...but as you can see, it misses the last character of _SECOND_IMPORTANT_VALUE_
So I need a more generalised form of the jq '.foo[].bar.second | (.key1[23:46]), .key2' that replaces the numbers 23 and 46 with values determined from delimiter1 and delimiter2
I really want to keep it to a single line - without using bash variables over multiple lines, sort of keep it within jq.
Using a regex:
Online demo