SED确保XML插入不在注释中



我正在使用现有的RHEL7/8工具,并编写一个脚本,该脚本将向格式化为XML的配置文件中添加一段内容。我遇到过这样一种情况,我的sed语句可以将添加的文本插入注释中。

我当前的sed命令获取标记<Program>的最后存在,并在其结束标记</Program>之后插入新标记。

我怎么可能解释这一点,但又不总是在评论中?

我的脚本:

sed -i '0,/<Program id/s// <Program id="myProgram"> </Program>' filepath

XML示例(显示在注释中插入错误(:

<Program id="myProgram"></Program>
<!-- 
<Program id="commentedOutProgram"></Program>
<Program id="newlyAddedProgram"><Program>
-->

编辑:这是在安装时发生的。我想为一些RHEL 7/8内置工具添加一种在XML file中查找的方法,确保它不在注释中,并添加新内容

试试这个吧。通常的注意事项适用:它可能只适用于,确切地说是您提供的样本。如果您需要一个健壮的解决方案,请使用适当的XML工具。

sed -e '/<!--/,/-->/b' 
-e '0,%<Program id="[^"]*"></Program>%s%<Program id="myProgram"> </Program>%' filepath

您的原始脚本似乎有几个错误,所以我无法逐字逐句地复制它,但这至少应该让您了解如何修改它:添加b以跳过<!---->之间的任何行。

%分隔符只是为了避免反斜杠;sed允许您使用任何您喜欢的分隔符,而不是斜杠,您只需要反斜杠第一个。

b命令跳转到一个标签;如果没有指定标签,它会跳到脚本的末尾,即跳过替换部分并从下一行开始。b之前的地址表达式选择任何注释区域,即在匹配<!--的行和匹配-->的行之间的任何行。

最新更新