我有檔案variables.tf:
variable "do_token" {
description = "set DO token value"
type = string
}
variable "ssh_pub_key_fingerprint" {
description = "Set ssh key fingerprint stored in DO"
type = string
}
...
我想為匯出變數名稱撰寫腳本,如注釋,檔案terraform.tfvars。但第一行必須是#description,第二行變數必須是空值和雙引號,如下所示:
cat terraform.tfvars
#set DO token value
do_token = ""
#Set ssh key fingerprint stored in DO
ssh_pub_key_fingerprint = ""
我嘗試像這樣撰寫 bash 腳本test.sh:
#!/bin/bash
echo -n "" > test.txt
grep 'description\|variable' variables.tf | while read line; do
OUTPUT=$(echo $line | sed 's/ =//g; s/ {//g' );
# echo $OUTPUT
case "$OUTPUT" in
*description*)
DESCRIPTION=$(echo $OUTPUT | awk -F "\"" '{print $2}')
echo "#"$DESCRIPTION >> terraform.tfvars
;;
*variable*)
VARIABLE=$(echo $OUTPUT | awk -F "\"" '{print $2}')
echo $VARIABLE " = \"\"">> terraform.tfvars
;;
esac
done
但是當我顯示檔案terraform.tfvars值行是第一行,而描述行是第二行但必須相反
do_token = ""
#set DO token value
ssh_pub_key_fingerprint = ""
#Set ssh key fingerprint stored in DO
我怎樣才能正確地做到這一點?謝謝
uj5u.com熱心網友回復:
整個程式在 awk 本身中實作得更好。鑒于您的意見,
#!/bin/bash
gawk '
BEGIN { first = 1 }
/variable/ {
curr_var = gensub(/"/, "", "g", $2)
}
/description = ".*"/ {
if (first != 1) { printf("\n") }
printf("%s = \"\"\n", curr_var)
printf("#%s\n", gensub(/.*["]([^"] )["].*/, "\\1", $0))
first=0
}
'
...作為輸出發出:
do_token = ""
#set DO token value
ssh_pub_key_fingerprint = ""
#Set ssh key fingerprint stored in DO
在https://ideone.com/S8Fmz1的在線沙箱中查看此內容
uj5u.com熱心網友回復:
如果sed是一個選項
$ sed -n '/do_token/ {N;s/variable "\([^"]*\).*\n description = "\([^"]*\).*/#\2\n\1 = ""\n/p};/ssh/{N;s/variable "\([^"]*\).*\n description = "\([^"]*\).*/#\2\n\1 = ""/p}' input_file > terraform.tfvars
$ cat terraform.tfvars
#set DO token value
do_token = ""
#Set ssh key fingerprint stored in DO
ssh_pub_key_fingerprint = ""
uj5u.com熱心網友回復:
你可以移動這條線
echo $VARIABLE " = \"\"">> terraform.tfvars
線后
echo "#"$DESCRIPTION >> terraform.tfvars
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362582.html
