0

これは簡単な作業のように思えますが、どういうわけか私の頭を包み込むことはできません。H1 ~ H4 のヘッダーを含む HTML ファイルがあります。H3タグ間のコンテンツを取得したいと思います。2 つの H3 間のテキスト<H3></H3>はなく、2 つの H3 間のテキストです。

<H3>some text</H3>
<p> more text that I would like to grab</p>
<H3> some other text </H3>
<p> some more text that I'd like to get </p>

... 前もって感謝します

サンプル出力について説明するように求められました。以下のコメントで説明したと思います。同じことを繰り返しますが、不明な点があればお知らせください。

入力: 多くの H3 見出しを含む長いファイル

出力: それぞれが H3 見出しを含む行で始まり、次の H3 見出しの前の行で終わるフラグメントを含む多数の小さなファイル。

4

3 に答える 3

2

予想される出力を投稿せずに推測するだけですが、文字通り と の間のテキストが必要な場合は</H3><H3>GNU awk を使用する 1 つの方法を次に示します。

$ cat file
<H3>some text</H3>
<p> more text that I would like to grab</p>
<H3> some other text </H3>
<p> some more text that I'd like to get </p>
$ gawk -F'</H3>' -v RS="<H3>" -v ORS= 'NR>1{print $NF}' file

<p> more text that I would like to grab</p>

<p> some more text that I'd like to get </p>
$

$ cat file
<H3>some text</H3><p>more text that I would like to grab</p><H3>some other text</H3><p> some more text that I'd like to get </p>
$ gawk -F'</H3>' -v RS="<H3>" -v ORS= 'NR>1{print $NF}' file
<p>more text that I would like to grab</p><p> some more text that I'd like to get </p>

$ gawk -F'</H3>' -v RS="<H3>" 'NR>1{print $NF}' file
<p>more text that I would like to grab</p>
<p> some more text that I'd like to get </p>

複数文字の RS を使用できるようにするには、GNU awk が必要です。

ブロック間のテキストに改行が含まれている場合、それらは他の文字と同様に出力に再現されることに注意してください。

上記があなたが望むものでない場合は、もう一度、もっと教えてください....

于 2012-12-14T03:14:18.013 に答える
1

問題は、HTML 構文が非常に柔軟であることです。例えば:

<H3>some text</H3>
<p> more text that I would like to grab</p>
<H3> some other text </H3>
<p> some more text that I'd like to get </p>

<H3>
    some text
</H3>
<p> 
    more
    text
    that
    I
    would
    like
    to
    grab</p>
<H3> 
  some other text
        </H3>
<p>some        more     text that I'd        like to get
</p>

同じ出力が生成されます。余分な空白が取り除かれ、タグがあちこちに散らばっています。特定のタグを探すだけでは、何を求めているかを知ることはできません。

これを行う唯一の実際の方法は、HTML 形式のファイルを解析および整理できるモジュールを備えた Perl や Python などの完全なスクリプト言語を使用することです。Unix の正規表現で HTML や XML を解析することはできません。

残念ながら、これをbashshell、またはawkとしてタグ付けしましたが、これらのいずれも HTML 入力をクリーンな方法で実際に処理することはできません。

于 2012-12-13T21:59:36.177 に答える
0

まず、このシェル行は最初の H3 から H3 セクションを抽出します...

$ sed -e '1,/<H3/d' -e '/<H3/,$d'
于 2012-12-13T20:14:54.087 に答える