我的任务是创建配置文件。配置文件是JSON文件。以下示例
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
配置会随着json的“样式”属性的更改而重复。所以我要复制上面的文字说50次。然后我想用另一个逗号分隔文件输入的不同样式替换“style”属性,如下所示。
bold,italic,cryptic
输出将是
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
"text": {
"data": "Click Here",
"size": 36,
"style": "italic",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
"text": {
"data": "Click Here",
"size": 36,
"style": "cryptic",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
有更简单的方法吗?
答案 0 :(得分:4)
使用GNU awk进行gensub
的另一种解决方案:
awk -v RS= '
NR==FNR { n = split($0, styles, /,/); next }
{
for (i=1; i<=n; i++) {
style = "\"" styles[i] "\""
print gensub (/(["]style["]: ).[^,]+/, "\\1" style, "G", $0);
}
}
' style.txt config.file
首先使用名为style.txt的文件,该文件具有所需样式的逗号分隔值。您将它们存储在一个数组中。您继续迭代配置文件并换出样式段并将其替换为新模式。
我不愿意承认使用Perl,Ruby或python的JSON解析器可以更好地解析JSON,但是将其作为一次性选项发布,因为您无法控制配置文件。
答案 1 :(得分:3)
awk
救援!
$ awk -v RS= 'NR==FNR{t=$0;next}
{n=split($0,styles,",");
for(i=1;i<=n;i++) {s=t;
sub("bold",styles[i],s);
print s
}
}' template styles
其中template是json格式的文本,而样式是逗号分隔的文件(一行或多行)。假设“粗体”仅在模板中出现一次。
答案 2 :(得分:0)
我不确定你想要应用它,但你可以在每次迭代时读取相同的json,并在该迭代中更改Style所需的值。只是一个想法。