Sed 替换文件中的特定字符串,该文件不是搜索模式的一部分,但在后续文件中
我有一个如下示例所示的配置文件Sed 替换文件中的特定字符串,该文件不是搜索模式的一部分,但在后续文件中,sed,grep,sh,Sed,Grep,Sh,我有一个如下示例所示的配置文件 { "view": "pagelogfile", "text": "menu_logFile", "disabled": false, "icon": null, "cls": "treelevel2", "iconCls": null, "users": ["admin", "guest"], "expanded": null, "leaf": true, "data": [] },
{
"view": "pagelogfile",
"text": "menu_logFile",
"disabled": false,
"icon": null,
"cls": "treelevel2",
"iconCls": null,
"users": ["admin", "guest"],
"expanded": null,
"leaf": true,
"data": []
},
{
"view": "pagemyfeature",
"text": "menu_myFeature",
"disabled": false,
"icon": null,
"cls": "treelevel2",
"iconCls": null,
"users": ["admin", "guest"],
"expanded": null,
"leaf": true,
"data": []
}
根据硬件ID,某些配置选项对某些用户不可用。例如,view:pagemyfeature对用户guest不可用。我必须将用户“guest”从“users”数组中删除。由于同一个用户数组在配置文件中多次出现,我只想在一个地方将其更改为“users”:[“admin”]
,我唯一的搜索模式是menu\u myFeature,它可以进入该菜单的正确配置数组。如何更改该数组的子项行
这就是我想要的样子
{
"view": "pagelogfile",
"text": "menu_logFile",
"disabled": false,
"icon": null,
"cls": "treelevel2",
"iconCls": null,
"users": ["admin", "guest"],
"expanded": null,
"leaf": true,
"data": []
},
{
"view": "pagemyfeature",
"text": "menu_myFeature",
"disabled": false,
"icon": null,
"cls": "treelevel2",
"iconCls": null,
"users": ["admin"],
"expanded": null,
"leaf": true,
"data": []
}
使用sed对pagemyfeature和字符串替换进行Grepping不是问题。但是如何确保以后替换字符串6行?如果您确实想在
sed
中执行此操作,请尝试此操作。有许多工具可用于json
sed '/{/{:loop; N; /pagemyfeature/{:loop2; N; /users/s/,\? *"guest"//g; b loop2;}; /}/b; b loop;}' yourfile
更具可读性的格式:
/{/{
:loop;
N;
/pagemyfeature/{
:loop2;
N;
/users/s/,\? *"guest"//g; b loop2;
};
/}/b;
b loop;
}
您是对的,这是一个json。我不固定在sed上。您建议使用什么作为json操纵器?但是,您的命令会导致一个错误,未终止“}”
sed'/{/{:loop;N;/pagemyfeature/{:loop2;N;/users/s/,\?*“guest”//g;b loop2};/}/b;b loop;}“/var/www/Config/menu.json
您可以使用jq
。它类似于sed
,但专门为json
设计。感谢您对jq的提示。这在我的主机上有效,但我需要为我的目标进行交叉编译。因此,我修复了上面脚本中的语法错误(;缺失),完成了这项工作。非常感谢。