• ベストアンサー

URLの抜きだしをしたいです。

Cygwinを使用しています。あるディレクトリ以下のすべてのHTMLファイルから、リンクされているURLを抜きだしてテキストファイルに出力したいのですが、 grep -r 'href="http' ディレクトリ とやってURLをふくむ行を抜きだしたあと、どうすればいいのか分からなくなってしまいました。sedやawkを使えばできるかと思っているのですが・・・。 初歩的な質問で申し訳ありませんが、よろしくお願いしますm(_ _)m

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

  • ベストアンサー
回答No.2

一行にひとつのリンクしかないなら、コマンドラインで  $ cat ファイル名 | tr 'A-Z' 'a-z' | grep "href=" | sed -e 's/[^\n]*href=["'\'']//' | sed -e 's/["'\'' >][^\n]*//' > 出力ファイル名 たとえばこんな感じ。

beach_walker
質問者

お礼

sedでURL以外のところを消す、という方法でしょうか。 それでやってみます。ありがとうございます。

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

その他の回答 (1)

noname#86752
noname#86752
回答No.1

ファイルにリダイレクトしましょう。 grep -r 'href="http' ディレクトリ > url.txt とやれば、grepの結果がurl.txtというテキストファイルに吐き出されます。 あとはviやらlessやらで見ることができます。

beach_walker
質問者

お礼

あ、リダイレクトは知っていました。 不要なタグなどを除去し、URLだけの状態にしたかったんです。言葉足らずで申し訳ありません。

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

関連するQ&A

  • awkで特定の範囲の行を削除したい

    awkなどの使い方がよくわからないので教えてください。 あるテキストファイル中の、"del_start" という文字が入った行から"del_end" という文字が入った行までの全ての行を削除したファイルを作るシェルを作成したいと思っています。 awk(やsed、grep、cat ?)などを使って実現するにはどうすればいいのでしょうか? よろしくお願いします。

  • awkのパターンマッチングについて。

    特定web siteからfileをdownload後にファイルのmd5値 およびsha-1値をtextに抽出(出力)させたいと考えてます。 全体の流れとしては以下になります。 (1)web pageをfileとして保存 (2)htmlをtxtに変更しtext editerにてgrep ※grepに使用するキーはhttpsにすると下記情報が一行ず つ出力されます。 <tr><td><a href="https://download.xxxxxxxxxxxxxxxx"> href="#" title="MD5|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" href="#" title="SHA-1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (3)上記をキーとしてawkからテキストに出力 ご質問させていただきた点は(3)のawkの部分です。 Forawk.exeを使用して実行したいのですがパターンマッチングが分かりません。 以下key選択方法についてご教示の程お願いします。 (1) httpsから始まるリンクを$1 (2) "MD5|"から始まる32行の乱数を$2 (3) "sha-1|"から始まる40行の乱数を$3 print $1 " " $2 " " $3 でうまく表示できるのではないかと考えています。 その他良い案等ありましたら合わせてご提示の程お願いします。

  • エディターを紹介してください

    SE&プログラマーです。テキストエディターの使いやすくて簡単なものをご紹介ください。友人には「EMEDITOR」を紹介してもらいましたが、使うのが難しそうです。今は「cygwinでvi」を使っています。 必要な点はテキストのプログラムの修正です。以前UNIXをやっていましたので、そのため今はPCにcygwinを入れて、UNIXコマンドを使っています。「sed.grep.find」特にgrepはよく使います。grep(「多くのテキストファイル内の、ある指定文言と合致する行を表示させるコマンド)「grep "修正箇所" * -g」(*はすべてのファイルの意)多くのテキストファイル内の「修正箇所」という文言を含む行を表示、またリスト化もできます。「sed」は多くのファイル内の指定文字列を一括で置換してくれます。「find」はDIR内を下にもぐりながらファイル名検索をおこなえます。などの機能があります。 通常エディターは1ファイルを指定して、その中の文言修正をおこないますが、私は上述のように(例)いろいろなdirに散らばったファイル(プログラム)をある文言で探し出し、その箇所を画面の中央部に表示し、その上下関係を見ながら文言修正し、書き込む、そして次のファイルを修正するといった使い方がメインです。このようなのに理想的なエディターを探しています。よろしくお願いします。 (cygwin+viでも多くのことがかなえられますが、パソコンをフォーマットしなおすことが多く、毎回cygwin+viを正確にインストール(環境を整える)のが面倒なのです)

  • 文字列抽出について

    環境 ・Windows2000 SP4 ・Cygwin ※Windows環境ですがやりたいことがUNIX(bash)ベースなのでこちらに質問させていただきました。 あるディレクトリで ls -lAF | grep "^-" を実行し以下の出力(以下例)を得た後、awk等で「ファイル名」「サイズ」「日付」を抽出したいです。 (例) -rw-r--r-- 1 A0000001 なし 62 Mar 4 2005 aaa -rw-r--r-- 1 A0000001 なし 12099 Nov 7 2005 bbb -rw-r--r-- 1 A0000001 なし 62 Mar 9 2005 temp 1 ファイル名の取得は上記コマンド後、awkで$9を表示すれば、と思いましたが例の3番目の表示のようにファイル名がスペースで区切られていると表示が切れてしまい上手く取得できません。 $9以降の全てを抽出できるような方法をご教示いただけますか。awkでなくてもOKです。 よろしくお願いいたします。

  • ある単語を含む行と、1つ前の行とを削除するシェル

    UNIX初心者です。 シェル(Korn)で、あるファイル中に、単語 "iwa"を含んだら、その行と、1つ前の行とを削除したいシェルを作りたいのです。  つまり、grep, sed, awk などで、"iwa"を含む行がみつかったら、その行(iwaを含む行)と、なおかつ、1行前の合わせて、2行を削除するシェルを作りたいのですが、行番号(NR?)などを使うのでしょうか? よろしく、お願いします。

  • awkとsedはセットで覚えたほうがいいですか?

    仕事でときおりテキストファイルを加工することがあります。 最近awkを初めて使い簡単に処理できることが実感できました。 awkの本を探して調べていたら、「sed & awkプログラミング 改訂版」 を発見し、タイトルにsedとawkとあるので、"awkとsedはセット"なのかと かんじました。 awkを勉強するならsedも一緒に覚えたほうがいいのでしょうか?

  • 多数あるファイル(text base)の*行目だけを引っ張ってきて標準出力させたい。

    Unix初心者です。 SunOS > head -1 ./*.txt とすれば、以下のように1行目だけを引っ張ってきて標準出力させる事も可能ですが。 ==> 1234.txt <== hello ==> 1235.txt <== hello SunOS > head -2 ./*.txt とすると、1行目と2行目が標準出力されます。 ==> 1234.txt <== hello bye ==> 1235.txt <== hello bye ですが、以下に例をあげますが、このように " 2行目だけ " を標準出力させたいのです。 ==> 1234.txt <== bye ==> 1235.txt <== bye sed -n '2p' ./*.txt だと、理由は不明ですが一つのファイルしか標準出力されませんでした。 head 、sed でなくともawk grepでも構いません。 その他の自分の知らないコマンドで構いません。 文字検索ではなく、*行目と行数指定です。 できれば、ファイル名も同時に出力させたいのです。 欲を言えば、行数も出力させたいです。 更に、翌を言えば、指定行を増やせたら最高です。 例;)1行目と3行目を標準出力する。 scriptを作りこまずに、|(パイプ)でつなげれば一行のコマンドで処理可能なのでは ないかと想像してますが、いかがでしょうか。 宜しく頼みます。

  • 一つの行にURLが複数ある場合の、URL抽出方法は?

    htmファイルの中から、リンクされたURL情報を抽出するのが今回の目的です。 ご相談したいのは、URL情報が一つの行中に複数ある場合の抽出方法です。 ちなみに「一つの行にある<a href>リンクが一つだけ」の場合ですと、正規表現 <a +href=('|\").*('|\") *> でURLデータを正しく抽出できるところまで来ています。 ですが一つの行にある<a href>リンクが2つ以上あった場合は、最長一致のルールに従って、うまく抽出できません。 具体的に申し上げると、 ケース1:<a href="www.hoge.htm">ほげ</a> <a href="www.hoge.htm"> が抽出できる。 ケース2:<a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm">ほげほげ</a> <a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm"> が抽出される。(本当は2つを別々に取り出したい)

  • URLの相対指定について

    いま、BASEタグを使ってURLを相対指定して、簡略化をしているHTML文書があります。 このHTML内で、もう一つ別の相対指定の基準を指定する方法はあるのでしょうか? リンクの位置関係は簡単に書くと下のようになってます。 Web Site +-HTML文書 +-リンク先のファイル(複数) Local +-リンク先のファイル(多数) Localのリンク先のファイルが多数あるので、 いちいち<A href="file:///.....と書くのがいやなので、 BASEタグによる基準をLocalのフォルダにしています。 しかし、こうするとWeb Site上へのリンクはいちいち、 <A href="http://.....と絶対指定しなければなりません。 これを回避したいのです。

  • UNIXで、とあるテキストに対して2文字区切りで改行をいれるには?

    UNIXのシェルスクリプトで、このような動作ができないものかどうか考えています。 あるテキストファイルの内容を、2文字ごとに区切って改行を入れるように加工する 例えば file1.txt が以下のような内容であれば --file1.txt-- 000092 027301 01 0263000001 2文字ずつ区切って改行を挿入したファイル --file2.txt-- 00 00 92 02 73 01 01 02 63 00 00 01 を生成したいと思います。 ここで元のファイルは必ず、半角の数字のみで構成されており、 1行の文字数は最低2文字以上あり、なおかつ奇数個の文字列は存在しないものとします。 awk や grep や sed を組みあわせて考えているのですが、 なかなか解決に至りません。 どなたかお知恵を拝借願います。