0

「」を含む「test.html」ファイルにある次のhtmlコード内からテキストを抽出するには、どのコマンドを使用する必要があります<span id="imAnID">extractme</span>か?

ファイルが大きくなるので、grep または sed で ID を指定し、この ID を持つタグからテキストのみを抽出するように指示する必要があります。ファイルが存在するディレクトリからターミナルを実行すると仮定すると、次のようになります。

cat test.html | sed -n 's/.*<span id="imAnID">\(.*\)<\/span>.*/\1/p'

私は何を間違っていますか?空の出力が得られます...簡単であれば、これにgrepを使用することに反対しません。

4

4 に答える 4

0

代わりにそれを試すことができますawk

  #!/bin/bash

  start_tag="span id=\"imAnID\""
  end_tag="/span"

  awk -F'[<>]' -v taga="$start_tag" -v tagb="$end_tag" '{ i=1; while (i<=NF) { if ($(i)==taga && $(i+2)==tagb) { print $(i+1) }; i++} }'

これを次の方法で使用します。

$ ./script < infile > outfile
于 2012-10-30T19:09:19.133 に答える
0

使用してgrep -o

echo "<span id="imAnID" hello>extractme</span> <span id='imAnID'>extractmetoo</span>" | grep -oE 'id=.?imAnID[^<>]*>[^<>]+' | cut -d'>' -f2

見つけます:

#=>extractme
#=>extractmetoo

span目的のid属性を持つ要素が要素の直前にある場合に機能しますextractme

于 2012-10-30T21:43:26.837 に答える
0

これらのツールは行ベース (一度に 1 行) であるため、これに awk、sed、または grep を使用するのは厄介です。抽出しようとしているスパンがすべて同じ行にあることが保証されていますか? スパン内で他のタグが使用される可能性はありますか (emタグなど)? そうでない場合、これはperlの仕事のように思えます。

于 2012-10-30T21:46:41.667 に答える
0

awk、sed、および grep は行指向のツールです。XML と HTML はタグに基づいています。行指向のツールに頼る前に、XML または HTML で整形式フォーマッターを使用することにより、XML および HTML で awk、sed、および grep を使用することはできますが、この 2 つをうまく組み合わせることはできません。

xmlgawk と呼ばれるプログラムがありますが、これはかなり gawk に似ているはずですが、まだ XML を扱っています。

私は個人的に、lxml モジュールを使用して Python でこの種のことを行うことを好みます。これにより、XML/HTML が冗長になりすぎずに完全に理解できるようになります。

于 2012-10-30T22:35:49.037 に答える