Замена значений в файле Yaml с помощью Sed cmd - PullRequest
1 голос
/ 16 июня 2020

У меня есть файл YAML ниже

Test:  '5.3.4.7'
Cloudmode:  'Azure'

Я хочу заменить значение Test .ie '5.3.4.7' на '6.3.4.7'

Ниже приведено то, что у меня есть получил, он заменяет значение, но не отображается в другой строке. Я также не хочу жестко указывать значение "5.3.4.7". Какой-нибудь совет, пожалуйста?

sed -i -e  \'s/5.3.4.7/\'${version}\'\\n/\' -e $\'s/cloudmode/\\\n cloudmode/g\' defaults.yaml

1 Ответ

2 голосов
/ 16 июня 2020

Не могли бы вы попробовать следующее решение awk + tac, написанное и протестированное с показанными образцами в GNU awk. Поскольку OP упомянул, что OP не может использовать yq, поэтому добавьте это решение.

Существует переменная awk с именем new_version, которая будет иметь новую версию, которую OP потребует в выводе, вы можете позже изменить номер версии там в соответствии с вашими потребностями и не нужно редактировать основной блок кода.

tac Input_file | 
awk -v s1="'" -v new_version="6.3.4.7" '
/Cloudmode.*Azure/{
  found=1
  print
  next
}
found{
  $NF=s1 new_version s1
  found=""
}
1
' | tac


В случае, если вас устраивает вышеуказанное и вы хотите сохранить на месте в Input_file, используйте следующее.

tac Input_file | 
awk -v s1="'" -v new_version="6.3.4.7" '
/Cloudmode.*Azure/{
  found=1
  print
  next
}
found{
  $NF=s1 new_version s1
  found=""
}
1
' | tac > temp && mv temp Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...