Я использую многострочный строковый параметр Jenkins для добавления новых записей в файл yaml. Но затем я хочу отформатировать эти записи в соответствии с синтаксисом yaml.
Желаемый конечный результат:
var:
- subvar1
- subvar2
- subvar3
...
На данный момент я сделал следующее:
Я запускаю сценарий оболочки, который принимает этот многострочный строковый параметр (переменную среды), который выглядит как subvar1 \ nsubvar2 \ nsubvar3
и добавляет его в файл yaml. Итак, мой строковый код выглядит так:
printf "var:\n${HOSTNAMES}" >> ${WORKSPACE}/group_vars/all
После этого файл yaml выглядит так:
var:
subvar1
subvar2
subvar3
Я прошу у вас помощи, как добавить два пробела и дефис, а затем пробел перед каждой строкой после var:
EDIT : Если SED или AWK не подходят для этого, как лучше это сделать?
Если это буквальные новые строки в переменной, то можно сделать:
HOSTNAMES='subvar1
subvar2
subvar3'
(IFS=$'\n'; printf -- "- %s\n" $HOSTNAMES) # variable is unquoted
- subvar1
- subvar2
- subvar3
Если у вас есть буквальные \
и n
символы, то это даст тот же результат:
HOSTNAMES='subvar1\nsubvar2\nsubvar3'
printf "$HOSTNAMES\n" | sed 's/^/- /'
С массивом bash:
$ HostNames=( host1 "host two" host3 )
$ { printf 'var:\n' ; printf -- ' - %s\n' "${HostNames[@]}"; } > somefile
$
$ cat somefile
var:
- host1
- host two
- host3