Bash脚本,用于按字母顺序向文件中添加多行

Bash脚本,用于按字母顺序向文件中添加多行,bash,sed,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>

我有一个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>

每个
包含两个
链接,指向每个事物的不同版本

我需要做的是,从一个bash脚本中,根据XXXX是什么,以正确的字母顺序向表中添加一个新的


我已经有了一个更大的脚本,可以通过sed命令将条目添加到一堆其他文件中,但是这个文件需要按字母顺序排列,我不知道如何处理这个问题。

sed
不懂html。使用html感知工具,例如,包装器:

open:F html file.html;
我的$new=“jjj”;
my$after=//table/tr[xsh:strmax($new,前面的同级::tr/td/a)=$new][last();
my$tr:=在$after之前插入元素tr;
插入块{”
“}转换成美元tr;

请注意位于
tr
之后插入新字符串的XPath:它是最后一个
tr
,因此它前面所有同级
tr
的max字符串加上新字符串等于新字符串。下面的
tr
将具有大于新字符串的字符串,因此它将更改maxstr。(代码不处理新字符串应该首先出现的情况,在这种情况下,$after将是空的)。

为什么您要完全绑定到bash?这听起来像是一种痛苦的做法,如果使用一个专门设计用于模仿DOM的工具,或者使用一个专门设计用于解析XML或HTML的工具,这将相对简单。不过bash不是那种工具。随着脚本范围的扩大,尝试使用该工具将带来痛苦。
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 ;