2017-07-05 17 views
0

(Xubuntu 16.04.2 x86_64) htmlファイルを解析して値を取得しようとしています。私は、これらのセクションの800をつかむためにループを介してこれを実行しているが、それが実行される最初の時間は、それが見つけ、このSed 2つのパターンの間で最初に一致するものを抽出します

<tr style="text-align: center; background:#FFF"> 

この

</td></tr> 

問題の間で抽出されたすべてのコードが必要です最初の文字列は正しくなりますが、最初の文字列の次の文字列ではなくファイル内の最後の文字列が使用されます。

私はそれぞれの検索結果をテキストファイルに出力しますが、最初のものは必要なものではないすべての単一のエントリを結合していますので、各エントリごとに個別のファイルが必要です。

その代わりに、複雑な文字列を使用しての、の私は、私はこのコード

sed 1,/<div>/,/<\/div>/!d' sourcefile > output 

しかし、ファイル全体を与えると、そのコマンドを使用しての代わりに、最初の試合を選んでいます

<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 

このHTMLを持っているとしましょう</div>.

可能であれば、awk、grep、またはperlよりむしろsedを使用します。

+0

*ループを介してこれらのセクションの800をつかむために* - *私は*各エントリの個々のファイルを必要とする - ので、あなたがしたいです800ファイルを取得する? – RomanPerekhrest

+0

ええ、私はその部分をコーディングすることができますが、当分の間は無関係です。 – knuxyl

+0

** Python **で簡単です – RomanPerekhrest

答えて

0

あなたはsedを主張した場合、これはトリック(私が正しくあなたの質問を理解していれば)実行する必要があります。POSIX ERE(拡張正規表現)が常に貪欲あるので

sed -n '/<div>/,/<\/div>/ { /<\/*div>/d; p }' file 

を、アドレス範囲/<div>/,/<\/div>/ます常に連続的にキャッチdiv秒。これらのブロックで実行するコマンドは、(外側)<div></div>を削除するだけです。他のすべてを印刷します。入力fileについては

a 
<div> 
    1 
</div> 
b 
<div> 
    2 
</div> 
c 
<div> 
    3 
</div> 
d 

出力は次のとおりです。

1 
    2 
    3 
関連する問題