SED или AWK ?: Добавить символ в каждую строку после найденного шаблона

Я использую многострочный строковый параметр 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 не подходят для этого, как лучше это сделать?

0
28.02.2017, 20:52
2 ответа

Если это буквальные новые строки в переменной, то можно сделать:

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/^/- /'
1
28.01.2020, 02:34

С массивом bash:

$ HostNames=( host1 "host two" host3 )
$ { printf 'var:\n' ; printf -- '  - %s\n' "${HostNames[@]}"; } > somefile
$ 
$ cat somefile
var:
  - host1
  - host two
  - host3
1
28.01.2020, 02:34

Теги

Похожие вопросы