Думаю, что нет. Однако вы можете создать псевдоним для предыдущей команды истории, используя fc
. Пример с pc для «предыдущей команды»
alias pc='fc -s 9999999'
Вы могли бы на самом деле найти историю, чтобы найти текущий номер истории, что было бы более правильным. если число слишком велико для истории, fc просто использует самый высокий доступный номер истории, который будет номером предыдущей команды. Я предполагаю, что вы никогда не достигнете такого высокого числа в истории, поэтому это должно просто сработать.
jq 'walk(if type == "object" then with_entries( if.key == "name1" then.key = "newname1" else. end ) else. end)' file
Это более или менее прямо из jq
руководства (раздела, описывающего walk()
функцию ). Функция walk()
действует как «рекурсивная map()
», и единственное, с чем нам нужно быть осторожным, — это проверять тип объекта, с которым мы в данный момент имеем дело.
Используя walk()
, вы также можете применить свой первый подход:
jq 'walk(if type == "object" and has("name1") then (.newname1 =.name1 | del(.name1) ) else. end)' file
Однако при этом ключ newname1
помещается последним в каждом объекте, а не заменяется name1
на позицию, в которой он был найден (, если это имеет значение ).
Другой подход (с jq
1.6 )заключается в использовании рекурсивного оператора приличия ..
, выборе всего, что имеет ключ, который мы ищем, и последующем обновлении этих объектов:
jq '(.. | select(has("name1")?)) |= with_entries(if.key == "name1" then.key = "newname1" else. end)' file