仕事と子育てを両立。働くママを、もっと笑顔に!>>

どなたかご教授下さい。linux初心者です。

気象庁の地震速報の詳細ページを日別に自動で入手したいのです。
たとえば今日ならば、ひとつのファイルは

http://www.jma.go.jp/jp/quake/20110612112208391- …

...112208391-121117が発生時刻と発表時刻となるようなので
規則性がありません。そこで:

$ wget http://www.jma.go.jp/jp/quake/20110612\d{9}-\d{6}.html

とやったのですが;

--2011-06-12 12:58:36--
http://www.jma.go.jp/jp/quake/20110612d%7B9%7D-d …
Resolving www.jma.go.jp (www.jma.go.jp)... 124.40.39.100
Connecting to www.jma.go.jp (www.jma.go.jp)|124.40.39.100|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2011-06-12 12:58:36 ERROR 404: Not Found.

となってしまいます。

これはwgetの正規表現がおかしいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

「正規表現の理 解不足だったようです。



自己解決がとんでもない方向にむかいそうなので軌道修正するよ。

まず、理解不足なのは「正規表現」じゃなくて、Linux のコマンドなら正規表現がつかえるだろうというおもいこみかな?

しらなかったかもしれないけど、wget は正規表現つかえないよ。正規表現がつかえるコマンドなんてもともとそんなに多くないし。

正規表現がつかえるコマンドかどうかは、
$ man コマンド名
で表示されるコマンドリファレンスのなかに正規表現のことがかいてあるからわかるとおもうよ。

あと、正規表現っていっても方言のようなものがあって、コマンドによってつかえる表現が少しずつちがうから注意してね!

正規表現を覚えるなら、とりあえず grep からでいいかな?
http://linuxjm.sourceforge.jp/html/GNU_grep/man1 …


質問の解決策は、[ANo.4] さんが回答してくれてるからとくにいらないよね。

よい Linux ライフを!
    • good
    • 0
この回答へのお礼

ありがとうございました。正規表現をdosのワイルドカードと誤解してしまい、ファイル名が不明でも規則に従ってwget出来る、と誤解していました。
unixは勉強し始めたばかりで、皆さんに迷惑をかけてしまいました。あれから自力でスクリプトを書いて(下記)みたのですが、やはり[ANo.4]が綺麗ですね。大変勉強になりました。

#(1)気象庁ファイルの抜き出し
wget http://www.jma.go.jp/jp/quake/quake_local_index. …
#(2)特定月日の行だけ抜く
awk '/20110612/ {print $0}' quake_local_index.html > quake.log
#(3)html部分だけ抜く
$ awk '{print substr($0,25,30)}' quake.log > add_quake.log
#(4)シェルスクリプト作成
cat add_quake.log | awk '{print "wget http://www.jma.go.jp/jp/quake"$1}' > jikko.sh
#(5)実行
sh jikko.sh

お礼日時:2011/06/13 10:30

地震の一覧ページを取得して、欲しい日付のファイルをダウンロードするスクリプトを書けばよいでしょう。


ということで書いてみました。

#!/bin/bash

# 前日の地震の情報を取得するスクリプト

date=`date +%Y%m%d --date=yesterday`
wget http://www.jma.go.jp/jp/quake/quake_local_index. … -O html.txt

for html in `grep "./$date" html.txt | cut -b 26-54`
do
wget -p --cut-dirs=2 http://www.jma.go.jp/jp/quake/$html
done
    • good
    • 0
この回答へのお礼

ありがとうございました。あれから自分でも考えて見よう見まねで作ってみたのですが、さすが見事なスクリプトです。大変勉強になりました。ご指導感謝します。

お礼日時:2011/06/13 10:31

httpでの通信では、一般的には、「有効なURLの一覧表」なんてものを受けとれるものではありません。


正規表現は、対象と比較してマッチするかどうかを調べるのに使うものです。
「比較対象」である「URL一覧」が無いのに、どうやって比較するのでしょう?

通常は、RSSとか、一覧表示するページとかから、正規表現にマッチするURLを抽出してそれをwgetで処理します。
    • good
    • 0
この回答へのお礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

お礼日時:2011/06/12 20:35

コマンドラインに書くURLに正規表現が使えるwgetがあるんでしょうか?



http://www.gnu.org/software/wget/manual/wget.html


\d{9}-\d{6} の『\d』ってこれ一般的な正規表現なのでしょうか?

http://www.kt.rim.or.jp/~kbk/regex/regex.html


# 回答でなく質問ですみません。
# お使いのwgetが特殊(?)な実装を施したものであるのなら・・・以下略
    • good
    • 0
この回答へのお礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

お礼日時:2011/06/12 20:36

正規表現?



リゾルバで別サイトへリダイレクトされているでしょう。
オプションをきちんと理解する方が良いです。
http://ja.m.wikipedia.org/wiki/2009%E5%B9%B4
    • good
    • 0
この回答へのお礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

お礼日時:2011/06/12 20:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qwgetでファイル名を指定してページを保存するには

wgetでページを保存したいのですが、ローカル側に保存するページ名を自分の好きな名前にしたいです。どうしたら良いでしょうか?

たとえば次のような感じです。
○リモートファイル名:「http:www.test.com/test_page.htm」
○ローカルファイル名:「hoge1.htm」

Aベストアンサー

-Oを付けて、
wget -O hoge1.htm http:www.test.com/test_page.htm

参考
http://www.google.co.jp/search?num=50&lr=lang_ja&ie=sjis&q=wget%20使い方

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

QFTPコマンドでディレクトリごとファイル移動できるコマンドはありますか?

タイトルどおりなのですが、FTPでファイルを転送する際に、サブフォルダを含むディレクトリごとファイル転送するコマンドはありますでしょうか。
ディレクトリの中にあるすべてのファイルを移動したいのですが、サブフォルダがたくさんあるので、わざわざディレクトリの場所へ移動してmputを繰り返すのはめんどうで仕方ありません。
よろしくお願いします。

Aベストアンサー

ご使用になるOS環境が書いてないのですが、Linux,BSD等ならncftpで、get -R dir。
Windowsならffftpを使えば良いと思います。

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

QNTP の TCPポートは?

NTPは123/UDPでようは足りると思うのですが、
WELL KNOWN PORTとかいろいろな資料に「123/TCP」ポートが割当たってます。
ntpd,ntpdate等でNTPを使う場合、実際には123/TCPは使われているのでしょうか?

Aベストアンサー

RFC1305では「ntpには123/udpを割り当てる」となっていますが、RFC1700では「123 ntp」となっており、「123/udp」と明示されているわけではありません。
よって、「123/tcp ntp」が間違っている(または使えない)という明確な根拠にはなりません。

「現状では『123/tcp ntp』を実装するための定義が存在しない」程度に考えた方が良いと思います。

ただ、将来的にRFC2030のSNTPが(IPv6対応などの点で)主流になる可能性があるので、「123/tcp ntp」は定義されない可能性もあります。

QLD_LIBRARY_PATHって?

環境変数で「LD_LIBRARY_PATH」というのがあるかと思うのですが、この変数はOSが使用する変数なのでしょうか?それとも単一、あるいは複数のアプリケーションソフト(ORACLEなどのような)が使用する変数なのでしょうか?
基本的な質問で申し訳ありませんが、教えてください。

Aベストアンサー

OSが使用する変数です。リンク時または実行時にリンクする共有ライブラリを探すために使用されます。

LD_LIBRARY_PATHが設定されていない場合、ダイナミックローダーは/libや/usr/lib等に存在するライブラリを検索しますが、それ以外の場所に存在するライブラリを見つける事ができません。

実行プログラムが32ビットの場合はLD_LIBRARY_PATHが、64ビットの場合でLD_LIBRARY_PATH_64が設定されている場合はこちらが使用されます。

なお、リンク時パスや実行時パスはコンパイル時に設定することもできます。

Q空白を含んだシェル変数の代入

こんにちは。
空白を含んだシェル変数の代入について教えてください。

set test1="ABCD EFGHIJ"
set w1=$test1
echo "w1 = $w1"

このようなシェルスクリプトを実行させた時
w1 = ABCD
と表示されてしまいます。
解決案があれば教えてください。

よろしくお願いします。

Aベストアンサー

set w1="$test1"

ダブルクォーテーションで囲ってください。
この場合シングルはダメです(変数内容が展開されません)。

Qシェルの「:コマンドが見つかりません」エラー

TeraTermでシェル言語を実行したとき、
「:コマンドが見つかりません」というエラーが出ました。
何行目かとか、どのコマンドがとか、具体的にわかることはできないのでしょうか?

Aベストアンサー

sh -x スクリプトファイル名
で、スクリプト中の各コマンドが実行直前に表示されますので、それで大体わかると思います。
ただ、「:コマンドが見つかりません」という表示のすぐ左にそのコマンドが出ているはずです。もしかして、全角空白が入ってそれがエラーになってるとか?

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む


人気Q&Aランキング