URLのrcodeパラメータの値を取得
$ cat url.txt | sed -e 's/^.*[?&]rcode=\([^&]*\).*/\1/g'
^ | .* | [?&] | \([^&]*\) |
先頭 | 0文字以上の任意の文字列 | ? or & | & 以外の任意の文字列を後方参照(rcode=から&の間の文字列を取り出す) |
[url.txt]
http://biz.travel.yahoo.co.jp/bin/msearch?rcode=capital_outline&ktype=0&jtype=1&fo=h
http://biz.travel.yahoo.co.jp/bin/msearch?ktype=0&jtype=1&rcode=capital_outline&fo=h
http://biz.travel.yahoo.co.jp/bin/msearch?ktype=0&jtype=1&fo=h&rcode=capital_outline
↓
capital_outline
capital_outline
capital_outline
最初に現れる「:」までにマッチさせる
#!/bin/sh echo "aaabbb:ccc:ddd" | sed -e 's/\([^:]*\).*/\1/'
\([^:]*\) |
:以外の任意の文字列を後方参照 |
$ ./test.sh
aaabbb
#!/usr/bin/perl my $str = "aaabbb:ccc:ddd"; if ($str =~ /(.*?):/){ print $1, "\n"; }
(.*?) |
? を付けると最短マッチになる。付けないと最長マッチ(aaabbb:ccc)になる |
$ perl test.pl aaabbb
URLにマッチさせたい
#!/usr/bin/perl while (my $line = <STDIN>){ chomp($line); if ($line =~ /(https?|ftp):\/\/([^:\/]+)(?::(\d+))?(\/.*)?/){ print $2 . ($3 ? ":$3" : ''), "\n"; } }
(https?|ftp) | ([^:\/]+) | (?::(\d+))? |
http(sがついても付かなくてもマッチ)、またはftp | : , / 以外の1文字以上の任意の文字列 | (?:hoge)は非キャプチャ。:(\d+)で1文字以上の数値(ポート番号)をキャプチャ。末尾の? でポート番号があってもなくてもマッチ |
[url.txt]
https://www.google.co.jp
http://auctions.yahoo.co.jp:80/
http://biz.travel.yahoo.co.jp/bin/msearch
$ cat url1.txt | perl test.pl
www.google.co.jp
auctions.yahoo.co.jp:80
biz.travel.yahoo.co.jp