以下 awk 脚本将向SAMPLE
block添加一个条目NOTES
。我有多个同名的块。在此命令中需要更改什么才能将条目 SAMPLE 仅添加到第一个块“NOTES”?
包含以下内容的 class.txt。
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
运行此命令后
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z)
}
sub (/$/,"\n"z ,$0)
};1' class.txt
输出:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
whitelist.4=SAMPLE <-------
上面的 awk 命令需要更改什么才能仅添加到块匹配 [serverClass:NOTES] ?
预期的:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <------- should be
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
答案1
最简单的方法是使用一个变量并将其值设置为1
第一次NOTES
找到的时间。然后,告诉您的脚本仅在变量不是 时才添加新条目1
。例如:
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/ && flag!=1{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z);
flag=1;
}
sub (/$/,"\n"z ,$0)
};1' infile