有谁知道如何使用regex / grep / sed / awk将序列号插入字符串?我有一个很长的.xhtml
文档(使用BBEdit进行编辑),包含大量普通<p>
标记,我希望将它们转换为<p id="0001">
,<p id="0002">
等。
答案 0 :(得分:1)
使用xmlstarlet和bash:
尝试此操作<?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©®™,更好的解决方案是使用python,perl,ruby等语言和 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