使用regex / grep / sed / awk将序列号插入字符串

时间:2016-10-03 18:17:27

标签: regex awk sed grep

有谁知道如何使用regex / grep / sed / awk将序列号插入字符串?我有一个很长的.xhtml文档(使用BBEdit进行编辑),包含大量普通<p>标记,我希望将它们转换为<p id="0001"><p id="0002">等。

2 个答案:

答案 0 :(得分:1)

使用

尝试此操作

示例xml文件:

<?xml version="1.0"?>
<root>
  <p></p>
  <p></p>
  <p></p>
</root>

代码演示

c=$(xmlstarlet sel -t -c 'count(//p)' file.xml)                                                                  
for ((i=1; i<=$c; i++)); do                                                                                      
    xmlstarlet edit --inplace --insert "//p[$i]" --type attr -n 'id' -v $(printf '%04d' $i) file.xml
done

样本输出

<?xml version="1.0"?>
<root>
  <p id="0001"/>
  <p id="0002"/>
  <p id="0003"/>
</root>

注意

这有点令人讨厌,即使是itWorks©®™,更好的解决方案是使用等语言和 XML解析器。这不是 困难

答案 1 :(得分:0)

在awk中,使用@Gilles Quenot的例子:

$ awk '/<p>/ {gsub(/<p>/,"<p id=\""sprintf("%04d",++i)"\">")} 1' example.xml
<?xml version="1.0"?>
<root>
  <p id="0001"></p>
  <p id="0002"></p>
  <p id="0003"></p>
</root>

说明:

/<p>/ {             # if <p> in record, replace it, sprintf for zeropading i
    gsub(/<p>/,"<p id=\""sprintf("%04d",++i)"\">")
} 1                 # print