sed:使用行号搜索和替换字符串

时间:2010-05-11 08:31:38

标签: string replace sed numbers line

我有一个包含很多空标记属性的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做这个,但我没有得到一个成功的结果。

我希望有人可以帮助我: - )

3 个答案:

答案 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变量中。