• ベストアンサー

grepの方法について

私は現在、500ファイル近いjspファイルもしくはhtmlファイルから hrefのリンクだけを抽出する作業を行っています。 下記コマンドでgrepをかけた場合、 後ろにつながる文字列まで抽出されてしまいます。 grep -i -e "href=" ソースファイルとしては、 <a href="ファイルパス.html" target><img src=""> というように、hrefの後ろにつながって 他のタグが記述されてしまっていますが、 hrefの"ファイルパス.html"のみを抽出したいのです。 どうすればよいでしょうか。 お手数かと思いますが、 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

No.2,4 です。 1行に2つ以上<a href=...>があるケースの処理をawkで書いてみました。 [user1@fedora ~]$ cat get_url.sh #!/bin/sh awk -F'href=\"' '/href=/{for (i=2;i<=NF;++i){split($i,s,"\"");print s[1]}}' $1 こういうシェルを作っておいて、chmod +x get_url.sh をしておいて、 [user1@fedora ~]$ find /var/www/html -name \*.html -exec ./get_url.sh {} \; こういう風にすると、 http://dev.mysql.com/doc/mysql/en/drop-table.html http://dev.mysql.com/doc/mysql/en/insert-delayed.html http://dev.mysql.com/doc/mysql/en/insert.html    :    :    : と出てくるようになりました。試してみてください。

googoocgi
質問者

お礼

簡単な質問に対し、とても丁寧にご回答いただきまして どうもありがとうございました。 ご教示いただいたとおり行った所 私の思ったとおりに実行することができました。 どうもありがとうございました。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

もしお使いのgrepがGNU grep であり、かつ-Pオプションが使用可能な状態なら、 grepだけでできます。 grep -P -o '(?<=href=")http://[\w.]+' 同じ行に複数マッチするものがあっても別の行にして出力してくれます。 検索パターンは (?<=href=")http://[^"]+ のほうがよいかも?

全文を見る
すると、全ての回答が全文表示されます。
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.2です。すみません、ちょっと私のところと実行環境が違ったようで、思うように動かなかったようです。 grep -i -e "href=" xxx.html | sed -e 's/^.*href=\"\([^\"]*\)\".*$/\1/g' ではいかがでしょうか。 たくさんのファイルを一括検索するのであれば、findを使えばいいのではないでしょうか。上のコマンドを、たとえば上記のコマンドを grep -i -e "href=" $1 | sed -e 's/^.*href=\"\([^\"]*\)\".*$/\1/g' とし、find_url.sh というシェルにしておいて、/aaa/bbb/以下の*.jspと*.htmlを検索するのに、 find /aaa/bbb -name \*.jsp -o -name \*.html -exec find_url.sh {} \; とやるとか。

全文を見る
すると、全ての回答が全文表示されます。
noname#96023
noname#96023
回答No.3

sedが使えているからシェルが使えているんですよね #/bin/sh for i in *.html echo "ファイル$i" grep -i -e "href=" $i | sed -e 's/^.*a href=\"//' | sed -e 's/html.*/html/' echo "\n\n\n" done こんな感じでどうでしょうか? 同じくテストはしてません また一行に2つ以上のファイル名がある場合は...暇だったら考えます

全文を見る
すると、全ての回答が全文表示されます。
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

こんなのでできないでしょうか。 grep -i -e "href=" xxx.html | sed -e 's/^.*href=\"\([^\"]*\)\".*$/\\1/g' 1行に2つ以上<a href=...>のタグがあると、最初の1つしか抜き出せませんが。そういうケースも考慮して全て抽出するとなると、もうちょっとややこしい方法になると思います。

googoocgi
質問者

お礼

早速、ご回答いただきまして どうもありがとうございます。 実行してみたところ、 \1 \1 というような結果になってしまいました。 どうしてでしょうか。 やはり、一行に複数ある場合は、 複雑になりそうですね。 少し、考えてみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#96023
noname#96023
回答No.1

grepだけじゃ無理ですね sedと組み合わせて grep -i -e "href=" | sed -e 's/^.*a href=\"//' | sed -e 's/html.*/html/' 試してないですがこんな感じでしょうか。。。

googoocgi
質問者

お礼

早速、ご回答いただきましてどうもありがとうございます。 試してみました。 grep -i -e "href=" *.HTML | sed -e 's/^.*a href=\"//' | sed -e 's/html.*/html/' 500近いファイルを一括検索するためには、 ディレクトリごとにしたいのですが、 ファイル名が出力されないため、 やはり、一ファイルずつしか 無理でしょうか。 簡単な質問ばかりで 申し訳ございませんが、 ご教示願います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 改行なしテキストからの任意文字列の抽出方法

    複数(何万件レベル)の.htmlファイルから、<img>タグの書かれた箇所、つまり <img src=".+"> を含む箇所が何箇所あって、どういう画像の参照があるのかを抽出したいのですが、困ったことにその.htmlファイルには改行が一切ありません。 今は秀丸のgrepを使用して試行錯誤しているのですが、 <img src=".+"> を含むファイル名とその行を表示しても途中で文字列が切れてしまうので、grepの結果に現れるのはせいぜい数個となり、正確に何箇所あるのか、抽出できずに困っています。 何かよい方法はないでしょうか? みなさまのご回答をお待ちしております。

  • grepの出力結果の保存

    LinuXのgrepコマンドに関する質問です。 既存のファイルからgrepコマンドで特定の文字列が含まれた行だけを抽出し、その行数を数えるという課題です。 行数を数えるのでwcコマンドを使おうと思ったのですが、wcコマンドは「wc (ファイル名)」という使い方をしますよね。 ということは、grepコマンドで抽出した結果をファイルに保存しなくてはならないのですが、やり方がわかりません。

  • grepの使い方

    "A.lst"と"B.lst"の2つのファイルがあります。 ともにディレクトリ階層の一覧が記述されています。 2つのファイルを比較して、A.lstのディレクトリ階層の文字列を 含む行を、B.lstから抽出して、リダイレクトで出力するには、 どういうコマンド操作になるのでしょうか。 特定の文字列ならば単純に、cat B.lst | grep moziretsu > sample.lst でいいわけですが、この文字列がA.lstファイル内に複数行あり、 それを順にgrepするにはどうすればいいのかがわかりません。 シェルもただいま勉強中です。 よろしくご教授願います。

  • Excelから任意の文字列を抽出したい

    A列にリンクのタグがあるのですが、このような文字列から【リンク先】という部分と、【<img src="" alt="">】の部分だけを取り出したいと思いますが、上手く出来ません。 A列に入っているタグは→<a href="リンク先" target="blank"><img src="" alt=""></a> A列にリンクのタグが入っています。 B列に【リンク先】 C列に【<img src="" alt="">】 となるようにしたいです。 又A列の文字列には、<img src="" alt="">が続いて2つか3つ入っているものもありますが、その場合は、D列・E列に順番に抽出したいです。 最大でも<img src="" alt="">は4つまでしか入っておりません。 ダブルコーテーションの扱いなどがよく分からなくて、詳しかたいれば教えていただけるとありがたいです。 よろしくお願いいたします。 ※【】はわかりやすくするためのものです。

  • 勝手にタグが改変されてしまいます。

    初心者レベルでお許しください。 ブログにタグを貼ろうとしていますが、 <a href="~><img src="~></a><br><br><a href="~><img src="~></a><img src="~/gif.gif"> という構文をソースで入力し、 普通のモードに変えると、何故か勝手に改変されタグも変わってしまいます。 (~の部分はIDやホームページなどがかかれています。) <a target="_blank" href="http~></a><br /> <br /> <a target="_blank" href~></a><img alt="" src="http~> これが勝手に改変されないようにするにはどうしたらよろしいのでしょうか? 宜しくお願いいたします。

  • grep.exe と同じ機能をWindows上で実現する方法はありますか?(フリーソフト?)

    私は、かつて、まだ Windows3.1 さえもこの世に普及してない時代に、DOSコマンドの“grep.exe”コマンドを頻繁に使用していました。 例えば    grep AAA BBB > CCC  (AAA と BBB の、どっちがファイル名でどっちが文字列かは忘れました) という感じで、テキストファイル中で、特定の文字列が含まれている行を「行単位」で抽出して、そうして抽出した行の全てをまとめて他のファイル(CCC)に出力する、といった具合です。 その後10年以上、そのコマンドを使っていないのですが、このたび久しぶりに、その機能を使う必要が生じました。 現在でも、おそらくDOSコマンドプロンプトから手入力で実行できるのでしょうが、出来れば、一般の Windows 用ソフトと同様に、ウィンドウ表示でマウスクリックを使いながら“grep.exe”のようなことが出来れば、と思います。 というわけで、 “grep.exe”コマンドと同等か同等以上のことができる方法、若しくはソフトがありましたら、教えてくださいませ! なお、ソフトの場合は、フリーソフトで、かつ、出来るだけ軽いものを希望します。 なお、OSは Windows XP HE を使用していますが、MSオフィス系ソフトは使っていません。

  • ウインドウを狭めてもレイアウトが崩れない方法

    ウインドウを狭めてもレイアウトが崩れない方法を教えて下さい。 内容は、一番上にタイトルとしての画像を表示させて、その下に画像を3列で何列ものせる。 ウインドウを大きく広げたときは、それらの画像を中央に表示させてレイアウトを崩さないようにする。 下のような感じでは、ウインドウを狭めると画像が勝手に移動してしまいます。 全てを固定にしたいです。 お手本を教えて頂きたいです。よろしくお願いいたします。 添付画像が理想です。 ウインドウを狭めても画像が固定されている瞬間をイメージ化したものです。 <img src="" border="0" width="300" height="60" /> <br> <br> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a> <a href="" target="_blank"><img src="" alt="" border="0" width="250" height="166" /></a>

    • ベストアンサー
    • HTML
  • find,grepの使い方

    こんにちは SYSTEM V系のUNIXで 複数ファイルからaaaという文字列を含むファイルを 抽出し、さらにその中からbbbという文字列を含む ファイルを抽出するにはどうすればいいでしょうか? find,grep等を使えばできそうな気がするのですが 具体的にどう書けばいいか分かりません。 お分かりになる方、ご回答お願い致します。

  • HTMLタグ記述の方法

    自社のHPで提携先会社の専用コーナーにリンクさせようとしています。 先方からの指示に従いタグを変更しましたが、どうしてもエラーになります。 下記が修正箇所です。(xは伏字) <strong><span class="fsize_l"><span class="img"><a href="http://www.xxxx.co.jp/qab/xxxx.jsp?agentcode=xxxxx"><img src="_src~ タグの基本もほとんど分からず指示に従い作業していますが agentcode=xxxxx">の">あたりで大事なタグの記述を抜かしているのかもしれません。 どなたか、お分かりになる方ご教示ください。お願いいたします。

    • ベストアンサー
    • HTML
  • Windows2000のコマンドプロンプトで使えるgrep

    Windows2000のコマンドプロンプトで使えるgrepを探しています。どなたかご存知ありませんか? よろしくお願いします。 (batファイル内にgrepを記述して連続処理させたいのですが。。)

wrc-x3200gst3bの接続についての問題
このQ&Aのポイント
  • wrc-x3200gst3bの接続について問題が発生しています。ステップ4の消灯どちらかが点滅しない状態で困っています。
  • wrc-x3200gst3bの接続に関する問題があります。ステップ3までは順調に進んでいますが、ステップ4の消灯が点滅せず、困っています。
  • wrc-x3200gst3bの接続に問題があります。ステップ3までは問題なく進んでいますが、ステップ4のどちらかが点滅しないため、困っています。
回答を見る