我有一个文件,其内容如下:
<root>
<appender name="abc">
some lines
</appender>
<appender name="def">
some lines
</appender>
<appender name="qaz">
some lines
</appender>
</root>
我想在下面发表评论:
<!--
<appender name="def">
some lines
</appender>-->
所做的是
sed -i '/<appender name="def"/s/^/<--/;/<\/appender>/s/$/-->/' file.xml
这会将<!--
添加到<appender name="def">
的顶部,但是-->
被添加到存在</appender>
的所有行上。我只想将-->
添加到</appender>
上,以便在第一次比赛完成后进行搜索。
输出应如下:
<root>
<appender name="abc">
some lines
</appender>
<!--
<appender name="def">
some lines
</appender>-->
<appender name="qaz">
some lines
</appender>
</root>
我尝试搜索许多类似问题,但找不到。
答案 0 :(得分:0)
将以下内容保存到process.awk
/<appender name="def">/ {
show = 1
print "<!--"
}
/<\/appender>/ {
if( show == 1 )
{
$0 = $0 "-->"
show = 0
}
}
{
print
}
并使用
awk -f process.awk file.xml
说明:
出于在线显示的目的,awk脚本被写入一个单独的文件中。如果您愿意,可以轻松地将其转换为嵌入式版本。
答案 1 :(得分:0)
dibery的答案看起来不错,但由于您也标记了python,所以我将提供一个简单的脚本来完成您的工作。
with open("file.xml", "r") as r:
lines = r.readlines()
gotcha = False # Just a flag to know if we catched the field
with open("file.xml", "w") as w:
for k in range(len(lines)):
if '<appender name="def">' in lines[k]:
w.write("<!--\n")
gotcha = True # We got it!
w.write(lines[k])
if '</appender>' in lines[k] and gotcha:
w.write('-->\n')
gotcha = False # We have done our job, this avoids commenting every other '</appender>' field
输出
<root>
<appender name="abc">
some lines
</appender>
<!--
<appender name="def">
some lines
</appender>
-->
<appender name="qaz">
some lines
</appender>
</root>