查找单词并用文件中的单词替换
问题描述:
我有创建配置文件的任务。配置文件是一个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;"
}
是否有这样做的更简单的方法?
答
使用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开始。你将它们存储在一个数组中。你继续迭代你的配置文件,换掉样式段,并用新的模式替换它。
我讨厌承认JSON使用Perl,Ruby或python的JSON解析器可以更好地解析,但是由于您没有对配置文件的任何控制权,所以将其作为一次性选项发布。
答
我不确定你想要应用它,但你可以读取每次迭代相同的json,并在该迭代中更改需要的Style的值。只是一个想法。
答
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格式的文本,styles是逗号分隔的文件(一个或多个行)。假设“粗体”只在模板中出现一次。
json的阅读超出了我的控制范围。我只是提供配置文件。所以我一定会在文件 –
中做到这一点如果你只是修改json文件,那么我不认为你可以做的很多。等待看看其他人是否知道方法。如果您有权修改文件外部的文件(在代码中),只需使用put methog即可。 JSONObject date = jsonArray.getJSONObject(0).getJSONObject(“day”); person.put(“day”,“Tuesday”); –