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
