转换 Shell 中的字符串
Convert string in Shell
我有以下变量:
tags = {
environment = "development",
provider = "ServiceOne",
ansible_role = "nfs-role",
comment = "mysql"
}
在我的管道中,我需要将其转换为以下内容:
tfh pushvars -overwrite-all -dry-run false -hcl-var "tags={environment=\"development\", provider=\"ServiceOne\", ansible_role=\"nfs-rolep\",comment= \"mysql\"}"
我已经尝试使用 SED 和 AWK 但没有得到任何结果?
这是我现在站的地方:
#!/bin/bash
#[[ -z "" ]] && echo "==> Usage: ./transform_tfe_vars.sh <<INPUT_FILE>> <<OUTPUT_FILE>>" && exit 1;
vars_file=
#output_file=
tmp_file=".todelete.tmp"
cmd "$vars_file" | grep -v '^#' | awk '!/^$/' > "$tmp_file"
while read -r p; do
a=$(echo "$p" | awk '{print }')
b=$(echo "$p" | awk '{print }')
echo "tfh pushvars -overwrite-all -dry-run false -shcl-var \"$a=\""$b""\""
done <$tmp_file
shell 读取循环始终是处理文本的错误方法,请参阅 why-is-using-a-shell-loop-to-process-text-considered-bad-practice。发明 shell 的人还发明了 awk shell 来调用操作文本。
看起来这可能就是您想要做的:
#!/usr/bin/env bash
(( $# == 2 )) || { echo "==> Usage: ${0##*/} <<INPUT_FILE>> <<OUTPUT_FILE>>"; exit 1; }
vars_file=""
output_file=""
awk '
BEGIN {
ORS = ""
print "tfh pushvars -overwrite-all -dry-run false -hcl-var \""
}
NF && !/^#/ {
gsub(/[[:space:]]/,"")
gsub(/"/,"\\&")
print
}
END {
print "\"\n"
}
' "$vars_file" > "$output_file"
我有以下变量:
tags = {
environment = "development",
provider = "ServiceOne",
ansible_role = "nfs-role",
comment = "mysql"
}
在我的管道中,我需要将其转换为以下内容:
tfh pushvars -overwrite-all -dry-run false -hcl-var "tags={environment=\"development\", provider=\"ServiceOne\", ansible_role=\"nfs-rolep\",comment= \"mysql\"}"
我已经尝试使用 SED 和 AWK 但没有得到任何结果?
这是我现在站的地方:
#!/bin/bash
#[[ -z "" ]] && echo "==> Usage: ./transform_tfe_vars.sh <<INPUT_FILE>> <<OUTPUT_FILE>>" && exit 1;
vars_file=
#output_file=
tmp_file=".todelete.tmp"
cmd "$vars_file" | grep -v '^#' | awk '!/^$/' > "$tmp_file"
while read -r p; do
a=$(echo "$p" | awk '{print }')
b=$(echo "$p" | awk '{print }')
echo "tfh pushvars -overwrite-all -dry-run false -shcl-var \"$a=\""$b""\""
done <$tmp_file
shell 读取循环始终是处理文本的错误方法,请参阅 why-is-using-a-shell-loop-to-process-text-considered-bad-practice。发明 shell 的人还发明了 awk shell 来调用操作文本。
看起来这可能就是您想要做的:
#!/usr/bin/env bash
(( $# == 2 )) || { echo "==> Usage: ${0##*/} <<INPUT_FILE>> <<OUTPUT_FILE>>"; exit 1; }
vars_file=""
output_file=""
awk '
BEGIN {
ORS = ""
print "tfh pushvars -overwrite-all -dry-run false -hcl-var \""
}
NF && !/^#/ {
gsub(/[[:space:]]/,"")
gsub(/"/,"\\&")
print
}
END {
print "\"\n"
}
' "$vars_file" > "$output_file"