我想“编辑”一些xml文件,它们可能在一个文件中多次包含类似的部分。 我需要在每个部分中添加2条可能缺失的行(我称之为一对)。。i、 e.检查“配对”是否存在,如果不存在,则添加它们
下面是我想添加的可能缺少的对线
<arg>--possibleMissedKey</arg>
<arg>possibleMissedValue</arg>
下面的文件有一对,所以我不需要添加它们 但是,如果部分中有任何一个遗漏了这一对,我想将这一对添加到部分中。。此外,每个部分中的行数也是不可预测的
<some-tag-section-not-interesting>
some contents not interesting to me
</some-tag-section-not-interesting>
<some-tag-to-look-for>
<some stuff - a> ..... </some stuff - a>
<arg>--possibleMissedKey</arg>
<arg>possibleMissedValue</arg>
<something-else-not-interesting>blahblah</something-else-not-interesting>
</some-tag-to-look-for>
<some-tag-to-look-for>
<some stuff - b>....</some stuff - b>
<arg>--possibleMissedKey</arg>
<arg>possibleMissedValue</arg>
<something-else-not-interesting>blahblah</something-else-not-interesting>
</some-tag-to-look-for>
所以我考虑了几个选项,但每个人都有一个问题:</some-tag-to-look-for>
与
<arg>--possibleMissedKey</arg>
<arg>possibleMissedValue</arg>
</some-tag-to-look-for>
即,基本上将其添加到本节的最后一部分。 但是我不知道我是否可以在sed中“多行模式匹配”。我没有使用所谓的“等待空间”。 我的sed经验是检查“当前单行”中的一些字符串
我希望检查的另一个选项是引入一个inside_a_section_flag
,初始值为“0”。开始读取文件,当我发现一个开始的<some-tag-to-look-for>
时,我将该inside_a_section_flag
转换为“1”,
一旦到达“ending</some-tag-to-look-for>
”,我会做一些可能的更改,并将其返回到“0”。
所以这个inside_a_section_flag
,如果它是1,意味着我在节的内部。。。。所以我需要寻找“一对”,
如果我找到了这对,我将inside_a_section_flag
变成1,这意味着我不需要添加这对,并且可以退出当前部分。。。。
但我不知道sed是否也可以使用变量标志,即基于变量值进行条件替换/更改
这是否应该由shell来完成,而应该由python脚本来完成
这可能适用于您(GNU-sed):
在包含
<some-tag-to-look-for>
的行上进行匹配在下面几行中循环
如果遇到包含
<arg> possibleMissedKey</arg>
的行,请退出否则,如果当前行与
</some-tag-to-look-for>
不匹配,请复制并重复找到结束标记后,使用复制的行作为模板插入所需的两行(以便保留缩进)
相关问题 更多 >
编程相关推荐