質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

500閲覧

入れ子になっているhtml文のタグ内の文字列だけを抽出する

t134

総合スコア18

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/08/05 13:28

編集2018/08/05 14:37

html文をcurlコマンドでテキストファイルに保存したのですが、
保存したテキストファイルからタグなどはすべて削除して、
入っている文字列だけをシェルスクリプトをつかって抽出したいのですが方法をご教授いただけないでしょうか。

条件は、
・タグはすべて削除
・1つの文字列ごとに改行
・改行のみの行は無し
・何段階も入れ子になっているところがあり複数文字列が入っているところもある
・■のみの文字列の場合はその四角の色コードも抽出したいです。

一部だけですが、例えば下のコードの場合、

<tr> <td bgcolor="#aaaaaa"><table width="100%" border="0" cellspacing="1" cellpadding="3"> <tr> <td colspan="4" align="center" valign="middle" bgcolor="#fbfbfb"> <font size="3">#01 <strong>桐生</strong></font> <font size="2">[第6日 <font color="#ff9900">■</font>]</font>&nbsp;<img src="img/icon/weather15.gif" width="24" height="15" alt="雨" title="雨" /></td> </tr> <tr> <td width="15" align="center" bgcolor="#FFFFFF"> <!-- <a href="http://cgi.kyotei.or.jp/race/kekka.php?day=20180805&amp;jyo=01&amp;race=1" target="_blank"> --> <a href="http://boatrace.jp/owpc/pc/race/raceresult?rno=01&jcd=01&hd=20180805" target="_blank" rel="nofollow"> <font size="2"> <b>1</b> </font></a></td> <td width="60" align="left" valign="middle" bgcolor="#FFFFFF"> <div class="r1"><div class="rb">1</div></div><div class="r4"><div class="rb">4</div></div><div class="r2"><div class="rb">2</div></div> </td> <td width="75" align="right" bgcolor="#ffffff"><font size="3"> 3,280 </font></td> <td width="35" align="right" bgcolor="#ffffff"><font size="3"> <a href="http://odds.kyotei24.jp/odds-20180805-01-1.html" target="_blank">12</a> </font></td> </tr> <tr> <td width="15" align="center" bgcolor="#FFFFFF"> <!-- <a href="http://cgi.kyotei.or.jp/race/kekka.php?day=20180805&amp;jyo=01&amp;race=2" target="_blank"> --> <a href="http://boatrace.jp/owpc/pc/race/raceresult?rno=02&jcd=01&hd=20180805" target="_blank" rel="nofollow"> <font size="2"> <b>2</b> </font></a></td> <td width="60" align="left" valign="middle" bgcolor="#FFFFFF"> <div class="r1"><div class="rb">1</div></div><div class="r4"><div class="rb">4</div></div><div class="r3"><div class="rb">3</div></div> </td> <td width="75" align="right" bgcolor="#ffffff"><font size="3"> 2,400 </font></td> <td width="35" align="right" bgcolor="#ffffff"><font size="3"> <a href="http://odds.kyotei24.jp/odds-20180805-01-2.html" target="_blank">7</a> </font></td> </tr>

下のように抽出したいです。

#01 桐生 [第6日 #ff9900 ■ ] 雨 雨 1 1 4 2 3,280 12 2 1 4 3 2,400 7

めんどくさいと思いますがお助けいただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2018/08/05 13:43

「一つの文字列」の定義が不明です。"#01"と”桐生"が別々の文字列とならないのはなぜですか。
t134

2018/08/05 14:36

すいません。改行漏れでした。 別々の文字列になります。
guest

回答1

0

ベストアンサー

たぶんperlを使うのが一番簡単です。

perl

1use strict; 2use utf8; 3binmode STDIN, ":utf8"; 4binmode STDOUT, ":utf8"; 5 6while(<>){ 7 # 中から取り出すべきものがあるタグを分解 8 s{<font color="(#[a-fA-F0-9]{6})">()</font>}{"$1 $2 "}ge; 9 s{<img ([^>]*)/>} 10 { 11 " " . join(" ", $1 =~ /(?:alt|title)="(.*?)"/g) . " " 12 #<img src="img/icon/weather15.gif" width="24" height="15" alt="雨" title="雨" /> 13 }ge; 14 15 # その他のタグの削除 16 s{<.*?>}{}g; 17 18 # 空になった行については何もしない 19 /^\s*$/ and next; 20 21 #改行で分割して出力 22 print join("\n", split), "\n"; 23} 24

ざっくりこんな感じ。実際にはいろいろ悪さをする余計な文字列を先に削除しておくとか、いろいろ追加処理が必要でしょうが細かく見ていません。

これをsplit.plとかいった名前で保存しておいて

perl split.pl < input.html > output.txt

こんな感じで処理します。

投稿2018/08/06 03:58

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t134

2018/08/08 01:13

ありがとうございます! とても助かります! 頂いたコードlで試させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問