我的文件和内容如下所示。
------------------------------------------------
##
servers:
# Start OF VM1
- host: "VM1"
queueFilters:
include: ["*"]
channelFilters:
include: ["*"]
# End OF VM1
# Start OF VM2
- host: "VM2"
queueFilters:
include: ["*"]
channelFilters:
include: ["*"]
# End OF VM2
---------------------------------------------------
我想更新像queueFilter部分中的include之类的参数:["test1","test2","test3"]
仅限于从# Start OF VM1
到#End OF VM1
我尝试使用命令
V1=VM1
V2="test1","test2","test3"
awk -F': ' '/# Start OF '$V1'/,/# End OF '$V1'/{if( $0 ~/include/ ) {if ( $2 ~ /\[\]/ ) {gsub(/\]/,"'$V2']")} else {gsub(/\]/,",'$V2']")}}}1' input.yaml
有人可以帮我解决这个问题吗。
答案 0 :(得分:0)
首先,您应该将shell变量分配给awk
变量,而不是尝试将shell变量替换为脚本。
其次,如果您只想更新queueFilters
,则需要与之匹配。您可以设置一个变量,当您到达include
行时将使用该变量。
V1=VM1
V2='"test1","test2","test3"'
awk -F': ' -v V2="$V2" '
/# Start OF '$V1'/,/# End OF '$V1'/ {
if (/queueFilters:/) {inqueue = 1}
else if ($1 ~ /include/ && inqueue) {
if ( $2 ~ /\[\]/ ) {
gsub(/\]/, V2 "]")
} else {
gsub(/\]/, "," V2 "]")
}
inqueue = 0
}
}1' input.yaml