2017-12-12 17 views
0

私はbashスクリプトから編集したいhtml文書を持っています。各事の異なるバージョンへのリンクを持つ2つの<td> Sを含む各<tr>アルファベット順にファイルに複数の行を追加するBashスクリプト

<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> 

:HMTLファイルは次のようにフォーマットされたエントリのテーブルを持っています。

私がしなければならないことは、bashスクリプトから、新しい<tr>ブロックをXXXXの正しいアルファベット順にテーブルに追加します。

私はすでにsedコマンドを使って他のファイルの束にエントリを追加するより大きなスクリプトを持っていますが、このファイルはアルファベット順にする必要があります。

+0

なぜあなたは正確にbashに結びついていますか?それはそれを行うお尻の方法で痛みのように聞こえる。 –

+3

これは、XMLまたはHTMLを解析するために設計されたツールを使用して、DOMを使用して猿や合理的に設計されたツールでは比較的簡単です。 bashはそのツールではありません。そのスクリプトを作成しようとすると、このスクリプトの範囲が拡大するにつれて苦痛が伴います。 – JNevill

答えて

1

sed htmlが分かりません。それはすべての最後のtrように最大文字列です:新しいものが挿入されるべき後trを検索するXPath

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 ; 

注:例えばxshため、XML::LibXMLのラッパーをHTML対応のツールを使用しますその前の兄弟trの新しい文字列は新しい文字列と同じです。次のtrは新しい文字列よりも大きい文字列を持つため、maxstrが変更されます。 (このコードでは、新しい文字列が最初に来る場合は処理されません。この場合、$ afterは空になります)。

関連する問題