16

タグ内のテキストとその終了タグをHTMLファイルで一致させたい場合、コマンドgrepでどの正規表現を使用する必要がありますか?<div class="Message"></div>

4

3 に答える 3

13

使用する1つの方法は次のGNU grepとおりです。

grep -oP '(?<=<div class="Message"> ).*?(?= </div>)' file

タグが複数行にまたがる場合は、次を試してください。

< file tr -d '\n' | grep -oP '(?<=<div class="Message"> ).*?(?= </div>)'
于 2012-11-26T14:32:11.477 に答える
4

これを行うには、正規表現を指定します。

grep -E "^<div class=\"Message\">.*</div>$" input_files

これは、同じ行にあるエンクロージャーのみを印刷するわけではありません。タグが複数行にまたがっている場合は、次のことを試すことができます。

tr '\n' ' ' < input_file | grep -E "^<div class=\"Message\">.*</div>$"
于 2012-11-26T14:15:56.497 に答える
3

grepだけでは確実に実行できません。HTMLパーサーを使用してHTMLを解析する必要があります。

HTMLコードに次のようなものがある場合はどうなりますか。

<!--
<div class="Message">blah blah</div>
-->

コメントアウトされたコードに誤ったヒットが発生します。正規表現のみのオプションで失敗する他の例を次に示します。

XML::Grepここで説明するように、Perlモジュールからxmlgrepを使用することを検討してください。grepを使用してhtmlファイルのタイトルを抽出する

于 2012-11-26T15:55:24.657 に答える