Bash
SED 或 AWK?:在找到模式後向每一行添加字元
我正在使用 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