替换文件中不属于搜索模式但在后续文件中的特定字符串

Replace specific string in file which is not part of the search pattern but in follow up file

我有一个配置文件,如下例所示。

{
    "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": []
}

根据 HardwareId,某些配置选项对某些用户不可用。例如视图:pagemyfeature 对用户 guest 不可用。我将不得不从“用户数组”中删除用户 "guest"。由于同一个用户数组在配置文件中多次出现,我只想在一个地方将其更改为 "users": ["admin"],唯一我的搜索模式是 menu_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": []
}

搜索 pagemyfeature 以及用 sed 替换字符串都不是问题。但是如何确保稍后替换字符串 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;
}