我有一个包含很多空标记属性的XML文件。例如:
<mytag id="">
<ontent>aaa</content>
</mytag>
<mytag id="">
<ontent>bbb</content>
</mytag>
<mytag id="">
<ontent>ccc</content>
</mytag>
现在我想将id =“”替换为例如id =“2443”(id =“[linenumber]”)
我试着用sed做这个,但我没有得到一个成功的结果。
我希望有人可以帮助我: - )
答案 0 :(得分:2)
如果您想将空id=""
替换为id="l"
,其中l
是找到mytag
的行号,您可以这样做:
修改强>
根据评论:
perl -pe '$i++; s{id=""}{id="$i"}' < file.xml
答案 1 :(得分:1)
如果您可以保证您的XML(可以是自由格式)与您编写的格式完全相同,那么awk或perl可以比sed更简单地完成工作。 Unicornaddict有一些可行的方法,但我在替换线上会更加小心:
perl -pe '$i++; s{id=""}{id="$i"} if /^<mytag id="">/' filename.xml
如果您不能保证XML不是自由格式的,那么您必须使用适当的XML解析器来解析它。无法使用正则表达式解析通用XML。
答案 2 :(得分:0)
您可能希望尝试使用awk
。行号存储在NR
变量中。