- - PR -
正規表現について(泣)
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-10 22:15
kumapooといいます。
http://hoge.example.com/hoge1/hoge/・・・ こういったログがあります。 この中から、sedなどを使って http://hoge.example.com/ のみ抽出したいとおもっています。 申し訳ありませんが、どなたか抽出する記述方法を教えて頂けないでしょうか? よろしくお願いいたします。 [ メッセージ編集済み 編集者: kumapoo 編集日時 2006-01-10 22:49 ] | ||||||||
|
投稿日時: 2006-01-11 00:37
とりあえず… $ echo "http://hoge.example.com/hoge1/hoge/" | sed 's/\(http:\/\/[^\/]*\/\).*/\1/' http://hoge.example.com/ となりましたけど、どうでしょう? # どうもエスケープされる模様。 # '\'はそれぞれ2つではなく1つです。 ## エスケープされたのは、プレビューで確認したからのようでした。 [ メッセージ編集済み 編集者: 瀬戸っぷ 編集日時 2006-01-11 00:38 ] | ||||||||
|
投稿日時: 2006-01-13 14:37
瀬戸っぷさん
返信遅くなりました。
できました!!! ところで、僕は正規表現が全く苦手なんですが、(スクリプト書くときもいつも時間がかかってしまいます) なんか、訓練できるツールとか、問題集みたいな?ものがないですかね。 練習すればできるようになると思うのですが、そんなに正規表現を書く機会もないもので。瀬戸っぷさんみたいに、スラスラ書くことができるようになりたい。 大変あつかましい質問ですが、ご存知でしたらよろしくお願いいたします。 #とりあえず解決できてホっとしています。 | ||||||||
|
投稿日時: 2006-01-13 14:52
http://www.amazon.co.jp/exec/obidos/ASIN/4839913870/qid=1137131443/sr=1-5/ref=sr_1_10_5/503-5860526-8535939
http://www.oreilly.co.jp/books/4873111307/ この二冊がいいと思いますよ | ||||||||
|
投稿日時: 2006-01-14 01:23
スラスラ…でも無かったのですが。 15分くらい自宅サーバのターミナルで格闘してました。 数日前にBitTorrentでのUpLoad容量を算出するスクリプトを作ったときに sed使ったのでなんとか…… $ man sed とか、 $man regex 等々…… perlの正規表現とかとごっちゃになりかけてました。 # BitTorrentでCentOS4.2やらknoppixやらSUSE LinuxやらのDVDのISOを # cronで定時起動させているので、どの程度の負担率なのかログから算出する為に | ||||||||
|
投稿日時: 2006-01-14 15:21
区切り文字を変えればやたらとエスケープ乱発しないですむのに。
| ||||||||
|
投稿日時: 2006-01-18 12:13
kumapooです。
みなさん、どうもありがとうございます。 やっぱ自分の修行不足ということで、 正規表現の本(毎コミ発刊)を購入しました>>明智重蔵さん こんなツールも見つけました!!! http://www.aster-world.com/soft/regexchk.htm
瀬戸っぷさんも苦労していたんですね。。。
paniponi-xさん、もし差し支えなければその方法をカキコして頂けますか? 参考にさせてください。 よろしくお願いいたします。 [ メッセージ編集済み 編集者: kumapoo 編集日時 2006-01-18 12:25 ] | ||||||||
|
投稿日時: 2006-01-18 13:22
区切り文字はデフォルトで「/」が利用されているだけであってどんな文字でも良いのです。 sedの演算子(今回の例では「s」)の直後の文字が区切り文字という扱いになります。 「http://.....」のように抽出したい文字列の中に「/」が存在し、それが区切り文字と 被ってしまうためにエスケープが必要になっています。 ならば、被らない文字を区切り文字にすればエスケープ不要になる、ということです。 具体的には下記のようになるかと。 $ echo "http://hoge.example.com/hoge1/hoge/" | sed -e 's@\(http://[^/]*/\).*@\1@' |