Bash脚本按字母顺序将多行添加到文件

时间:2017-12-12 21:06:35

标签: bash sed

我有一个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命令将条目添加到一堆其他文件中,但是这个文件需要按字母顺序排列,我不知道如何处理它。

1 个答案:

答案 0 :(得分:1)

sed并不了解HTML。使用支持html的工具,例如xshXML::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会为空)。