Bash

SED 或 AWK?:在找到模式後向每一行添加字元

  • March 1, 2017

我正在使用 Jenkins 多行字元串參數將新條目附加到 yaml 文件中。但後來我想格式化這些條目以匹配 yaml 語法。

期望的最終結果是:

var:
 - subvar1
 - subvar2
 - subvar3
 ...

到目前為止我所做的是:

我正在執行一個 shell 腳本,它採用看起來像的多行字元串參數(一個環境變數)subvar1\nsubvar2\nsubvar3並將其附加到 yaml 文件中。所以,我的行程式碼如下所示:

printf "var:\n${HOSTNAMES}" >> ${WORKSPACE}/group_vars/all

之後的 yaml 文件如下所示:

var:
subvar1
subvar2
subvar3

我正在向你們尋求幫助,了解如何添加兩個空格和一個連字元,然後在後面的每一行之前添加一個空格var:

編輯:如果 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

引用自:https://unix.stackexchange.com/questions/348208