一个典型的Chef.g.json文件。服务器名.json在
{
"name": "myserver123",
"chef_environment": "test",
"run_list": [
"role[base-pkg]",
"role[interesting_stuff]",
"role[user_apps]"
]
}
我想做的是使用“一行程序”在文件中找到的最后一个角色之后添加一个新角色。因为我不知道文件中有哪些角色或有多少角色,所以我想搜索最后一个结束的"]"
括号并在其上方添加新角色。在
我尝试了以下方法:
^{pr2}$以为这会找到(现在)第一个“]”并在它后面添加新行。但是,当我运行cmd时,它会添加行“role[My_New_role]”3次。两次在"]"
之前,一次在"]"
之后的正确位置
问题:
1)为什么当“0”表示匹配一次时,该行加了3次?在
2)使用AWK、Perl或Python(2.7.5)更好吗?怎样?在
3)是否应该使用regex lookahead/behind而不是tac?在
4)因为我需要再次处理该文件,以便在倒数第二个角色中添加逗号,可能我的整个方法是错误的?什么是更好的方法?在
我不知道这是否是最好的方法(vs sed、AWK或Perl),但是使用python的
json
库可以很容易地完成您的要求。在输出文件如下所示:
^{pr2}$很容易将此代码修改为以文件名作为输入的脚本,这样就很容易多次运行。在
带有
JSON
模块的Perl:您可以通过将print命令替换为
print to_json($j, {pretty => 1})
来很好地打印它相关问题 更多 >
编程相关推荐