- PR -

正規表現について(泣)

投稿者投稿内容
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2006-01-10 22:15
kumapooといいます。

http://hoge.example.com/hoge1/hoge/・・・

こういったログがあります。
この中から、sedなどを使って
http://hoge.example.com/
のみ抽出したいとおもっています。

申し訳ありませんが、どなたか抽出する記述方法を教えて頂けないでしょうか?

よろしくお願いいたします。

[ メッセージ編集済み 編集者: kumapoo 編集日時 2006-01-10 22:49 ]
瀬戸っぷ
ベテラン
会議室デビュー日: 2003/11/28
投稿数: 56
投稿日時: 2006-01-11 00:37
引用:

kumapooさんの書き込み (2006-01-10 22:15) より:
kumapooといいます。

http://hoge.example.com/hoge1/hoge/・・・

こういったログがあります。
この中から、sedなどを使って
http://hoge.example.com/
のみ抽出したいとおもっています。

申し訳ありませんが、どなたか抽出する記述方法を教えて頂けないでしょうか?

よろしくお願いいたします。

[ メッセージ編集済み 編集者: kumapoo 編集日時 2006-01-10 22:49 ]



とりあえず…
$ echo "http://hoge.example.com/hoge1/hoge/" | sed 's/\(http:\/\/[^\/]*\/\).*/\1/'
http://hoge.example.com/
となりましたけど、どうでしょう?

# どうもエスケープされる模様。
# '\'はそれぞれ2つではなく1つです。
## エスケープされたのは、プレビューで確認したからのようでした。

[ メッセージ編集済み 編集者: 瀬戸っぷ 編集日時 2006-01-11 00:38 ]
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2006-01-13 14:37
瀬戸っぷさん

返信遅くなりました。

引用:

sed 's/\\(http:\\/\\/[^\\/]*\\/\\).*/\\1/'



できました!!!

ところで、僕は正規表現が全く苦手なんですが、(スクリプト書くときもいつも時間がかかってしまいます)

なんか、訓練できるツールとか、問題集みたいな?ものがないですかね。
練習すればできるようになると思うのですが、そんなに正規表現を書く機会もないもので。瀬戸っぷさんみたいに、スラスラ書くことができるようになりたい。

大変あつかましい質問ですが、ご存知でしたらよろしくお願いいたします。

#とりあえず解決できてホっとしています。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 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/

この二冊がいいと思いますよ
瀬戸っぷ
ベテラン
会議室デビュー日: 2003/11/28
投稿数: 56
投稿日時: 2006-01-14 01:23
引用:

ところで、僕は正規表現が全く苦手なんですが、(スクリプト書くときもいつも時間がかかってしまいます)

なんか、訓練できるツールとか、問題集みたいな?ものがないですかね。
練習すればできるようになると思うのですが、そんなに正規表現を書く機会もないもので。瀬戸っぷさんみたいに、スラスラ書くことができるようになりたい。



スラスラ…でも無かったのですが。
15分くらい自宅サーバのターミナルで格闘してました。
数日前にBitTorrentでのUpLoad容量を算出するスクリプトを作ったときに
sed使ったのでなんとか……

$ man sed
とか、
$man regex
等々……
perlの正規表現とかとごっちゃになりかけてました。

# BitTorrentでCentOS4.2やらknoppixやらSUSE LinuxやらのDVDのISOを
# cronで定時起動させているので、どの程度の負担率なのかログから算出する為に
paniponi-x
常連さん
会議室デビュー日: 2006/01/14
投稿数: 27
投稿日時: 2006-01-14 15:21
区切り文字を変えればやたらとエスケープ乱発しないですむのに。
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2006-01-18 12:13
kumapooです。

みなさん、どうもありがとうございます。

やっぱ自分の修行不足ということで、
正規表現の本(毎コミ発刊)を購入しました>>明智重蔵さん
こんなツールも見つけました!!!
http://www.aster-world.com/soft/regexchk.htm

引用:

スラスラ…でも無かったのですが。
15分くらい自宅サーバのターミナルで格闘してました。



瀬戸っぷさんも苦労していたんですね。。。

引用:

区切り文字を変えればやたらとエスケープ乱発しないですむのに。


paniponi-xさん、もし差し支えなければその方法をカキコして頂けますか?
参考にさせてください。

よろしくお願いいたします。

[ メッセージ編集済み 編集者: kumapoo 編集日時 2006-01-18 12:25 ]
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2006-01-18 13:22
引用:
引用:
区切り文字を変えればやたらとエスケープ乱発しないですむのに。

paniponi-xさん、もし差し支えなければその方法をカキコして頂けますか?
参考にさせてください。



区切り文字はデフォルトで「/」が利用されているだけであってどんな文字でも良いのです。
sedの演算子(今回の例では「s」)の直後の文字が区切り文字という扱いになります。

「http://.....」のように抽出したい文字列の中に「/」が存在し、それが区切り文字と
被ってしまうためにエスケープが必要になっています。
ならば、被らない文字を区切り文字にすればエスケープ不要になる、ということです。

具体的には下記のようになるかと。
$ echo "http://hoge.example.com/hoge1/hoge/" | sed -e 's@\(http://[^/]*/\).*@\1@'

スキルアップ/キャリアアップ(JOB@IT)