Команда stat
должна обрабатывать это:
stat -c "%a %n" /path/to/your/file
Ваши конкретные права доступа к файлам представлены восьмеричной1755
Вот как вы можете специально изменить .spec.template.spec.containers[].env[].value
для ISTIO _META _OWNER , используя|= sub()
Вот как замена выглядела ниже:
jq -r '.spec.template.spec.containers[].env[] | (select(.name=="ISTIO_META_OWNER") |.value |= sub("xxx$"; "yyy"))' kubernetes_spec_example.json
Что приводит к следующему:
{
"name": "ISTIO_META_OWNER",
"value": "kubernetes://apis/apps/v1/namespaces/istio-system/deployments/yyy"
}
Далее jq
используется для замены xxx
на yyy
в конце узла value
, соответствующего узлу name
со значением ISTIO_META_OWNER
.
jq '(.spec.template.spec.containers[].env[] | select(.name == "ISTIO_META_OWNER").value ) |= sub("xxx$"; "yyy")' file.json
Здесь используется sub("xxx$"; "yyy")
для замены текста, соответствующего xxx$
, в значении на yyy
. $
— это якорь регулярного выражения, который привязывает выражение к концу строки.
Результат
{
"spec": {
"template": {
"spec": {
"containers": [
{
"args": [
"proxy",
"router",
"--domain",
"$(POD_NAMESPACE).svc.cluster.local",
"--proxyLogLevel=warning",
"--proxyComponentLogLevel=misc:error",
"--log_output_level=default:info",
"--serviceCluster",
"istio-ingressgateway"
],
"env": [
{
"name": "JWT_POLICY",
"value": "third-party-jwt"
},
{
"name": "ISTIO_META_OWNER",
"value": "kubernetes://apis/apps/v1/namespaces/istio-system/deployments/yyy"
}
]
}
]
}
}
}
}
Ниже приведен немного более модульный подход, который удаляет все после последнего /
в значении и заменяет его любым значением, установленным для переменной newval
в командной строке jq
:
jq --arg newval 'yyy' '(.spec.template.spec.containers[].env[] | select(.name == "ISTIO_META_OWNER").value) |= sub("[^/]*$"; $newval)' file.json
Обратите внимание, что yyy
в этой команде автоматически будет правильно закодирован JSON с помощью jq
.