У меня есть json файл, подобный этому:
{
"abc": "A",
"abc-release": "B",
"bcd":"C",
"cde-release":"D",
"cde":"E"
}
, и я хотел бы получить получившийся файл следующим образом:
{
"abc": "B",
"bcd":"C",
"cde":"D"
}
То есть:
- удалить все элементы с ключом X, если у нас также есть ключ X-release;
- переименовать элементы с ключом X-release как X;
Необходимо выполнить эту работу с помощью Linux команды, такие как jq
и sed
. Желательно, как однострочник с трубами.
Я потратил несколько часов, пытаясь реализовать это, и лучшее, что я мог сделать, это команда jq, которая возвращает массив ключей, которые мне нужно удалить.
jq "with_entries(select(.key|endswith(\"-release\"))) | keys | map(split(\"-\")[0])"
[
"abc",
"cde"
]
Но как передать этот массив методом jq del
или каким-либо другим способом получить результат, который мне нужен?
Второй шаг (переименование элементов) - это просто. Это может быть сделано с помощью jq, но также может быть сделано в конце просто с помощью sed:
// simply like this
sed 's/-release//'
// or
sed 's/(.*)-release/$1/'