[英]edit xml file using sed or something by matching over multiple lines
我想“編輯”一些 xml 文件,這些文件可能在一個文件中多次包含類似的部分。 我需要在每個部分中添加 2 條可能的缺失行(我稱之為一對)。即檢查“對”是否存在,如果不存在則添加它們。
例如,下面是我想添加的可能缺少的對行。
<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',一旦我到達'結尾</some-tag-to-look-for>
',我做了一些可能的改變,然后把它變回'0'。 所以這個inside_a_section_flag
,如果它是 1,意味着我在這個部分里面......所以我需要尋找“pair”,如果我找到了那對,我將inside_a_section_flag
設置為 1,這意味着我不需要添加這對並可以退出當前部分....但我不知道sed 是否也可以使用變量標志,即根據變量值進行條件替換/更改。
這是否應該由 shell 完成,而不應該由 python 腳本完成?
這可能對您有用(GNU sed):
sed '/<some-tag-to-look-for>/{:a;n;/<arg>--possibleMissedKey<\/arg>/b;/<\/some-tag-to-look-for>/!{h;ba};x;s/\S.*/<arg>--possibleMissedKey<\/arg>/p;s//<arg>--possibleMissedValue<\/arg>/p;x}' file
匹配包含<some-tag-to-look-for>
行。
循環遍歷以下行。
如果遇到包含<arg>--possibleMissedKey</arg>
的行,則退出。
否則,如果當前行不匹配</some-tag-to-look-for>
,請復制並重復。
當找到結束標記時,以復制的行為模板插入所需的兩行(以保留縮進)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.