1

次のデータのシェルスクリプトを作成しようとしています

入力ファイルpage.txtの内容:

enter a first page title<br><div style="margin-left: 40px;">enter a first point <br></div><div style="margin-left: 80px;">enter a second point<br></div><div style="margin-left: 120px;">enter a third point<br></div><div style="margin-left: 80px;"><br></div><div style="margin-left: 40px;"><br></div><div style="margin-left: 40px;"><br></div>

アルゴリズム :

Read the pages file
Replace <br> with newline
Replace <div style="margin-left: 40px;"> with 1 tab 
Replace <div style="margin-left: 80px;"> with 2 tab
Replace <div style="margin-left: 120px;"> with 3 tab
Replace <div style="margin-left: 160px;"> with 4 tab

私はこれを使おうとしています

tr '<br>' '\n' < page.txt

期待される出力ファイル

enter a first page title
    enter a first point 
        enter a second point
            enter a third point

上記のスクリプトの書き方を教えてください。

4

2 に答える 2

1

パーサーなしで XML タグを処理するのは好きではありませんが、この特定のケースでは、データが奇妙に見える (形式が悪い) ため、と、置換コマンドで置換文字列を評価するオプションは、解決のための優れたツールです。

3 つの置換コマンドを使用します。1 つ目はすべて<br>を改行に置き換え、2 つ目はすべての終了divタグを削除し、3 つ目は開始タグを探しdivて属性の数を抽出し、それを使用してタブの数を計算します。入れる:

perl -pe '
    s/<br>/\n/g; 
    s{</div>}{}g; 
    s{\Q<div style="margin-left: \E(\d+)\s*\Qpx;">}{"\t" x ($1/40)}ge
' infile

次の結果が得られます。

enter a first page title
    enter a first point 
        enter a second point
            enter a third point
于 2013-07-23T08:11:40.627 に答える