我有一个html文档,我想从bash脚本编辑。 hmtl文件有一个格式如下的条目表:
<table>
<tr>
<td><a href="XXXX-1.example.com">XXXX</a></td>
<td><a href="XXXX-2.example.com">XXXX</a></td>
</tr>
<tr>
<td><a href="YYYY-1.example.com">YYYY</a></td>
<td><a href="YYYY-2.example.com">YYYY</a></td>
</tr>
</table>
每个<tr>
包含两个<td>
,其中包含指向每个内容的不同版本的链接。
我需要做什么,从bash脚本中,根据XXXX的正确字母顺序将新的<tr>
块添加到表中。
我已经有了一个更大的脚本,它通过sed命令将条目添加到一堆其他文件中,但是这个文件需要按字母顺序排列,我不知道如何处理它。
答案 0 :(得分:1)
sed
并不了解HTML。使用支持html的工具,例如xsh,XML::LibXML的包装:
open :F html file.html ;
my $new = "JJJJ" ;
my $after = //table/tr[xsh:strmax($new, preceding-sibling::tr/td/a) = $new][last()] ;
my $tr := insert element tr before $after ;
insert chunk {"
<td><a href='$new-1.example.com'>$new</a></td>
<td><a href='$new-2.example.com'>$new</a></td>
"} into $tr ;
请注意定位tr
的XPath,然后插入新的tr
:它是最后一个tr
,以便来自其前一个兄弟tr
的最大字符串&#39; s加上新字符串等于新字符串。以下var milliseconds = data[item].time;
var date = new Date(milliseconds);
将使字符串大于新字符串,因此它将更改maxstr。 (当新字符串出现时,代码不会处理这种情况,在这种情况下,$ after会为空)。