Для записи, следующий jq однострочный дает (что, кажется,) желаемый результат:
jq -R '[capture("(?<ID>[0-9]+)\\. *(?<Name>[^(]*) \\((?<Birth>[^)]*)\\) *(?<Marks>[0-9]*)")]' data.txt
, а именно:
[
{
"ID": "1",
"Name": "John",
"Birth": "1994",
"Marks": "92"
}
]
[
{
"ID": "2",
"Name": "Granny",
"Birth": "1972",
"Marks": "82"
}
]
Если кто-то хочет захватитьобъекты в одном массиве, можно использовать inputs
, например:
jq -nR '[inputs|capture("(?<ID>[0-9]+)\\. *(?<Name>[^(]*) \\((?<Birth>[^)]*)\\) *(?<Marks>[0-9]*)")]' data.txt
ОП также спрашивает:
, если имя состоит из разделенной пробелами строки
Приведенное выше регулярное выражение допускает пробелы в имени.