我的任务是创建一个配置文件。配置文件是一个 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 的“style”属性的改变重复配置。所以我要将上面的文字复制 50 遍。然后我想用从另一个逗号分隔文件输入的不同样式替换“样式”属性,如下所示。
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;"
}
有更简单的方法吗?
最佳答案
为 gensub
使用 GNU awk 的另一种解决方案:
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,但将此作为一次性选项发布,因为您无法控制配置文件。
关于shell - 查找单词并替换为文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36853709/