bash で URL をパースしてみる。
正規表現も使わずに URL をパースしてみる、誰得なテスト。
#!/bin/sh # URL からスキームを抜く function parse_url_scheme { local target=$1 local scheme=${target%%:*} echo $scheme } # URL から uid:pass を抜く function parse_uid_pass { local target=$1 local uid_url=${target#*//} local uid_pass=${uid_url%%@*} local uri=${uid_url#*@} if [ "$uid_pass" == "$uri" ]; then echo "" else echo $uid_pass fi } # URL からホスト名、ポート、パスのかたまりを抜く function parse_host_port_path { local target=$1 local uid_url=${target#*//} local uri=${uid_url#*@} echo $uri } # URL から UID を抜く function parse_uid { local uid_pass=$( parse_uid_pass $1 ) local uid=${uid_pass%%:*} local uri=$( parse_host_port_path $1 ) if [ "$uid" == "$uri" ]; then echo "" else echo $uid fi } # URL から PASS を抜く function parse_pass { local uid_pass=$( parse_uid_pass $1 ) local uid=${uid_pass%%:*} local pass=${uid_pass##*:} if [ "$uid" == "$pass" ]; then echo "" else echo $pass fi } # URL から ホスト名 を抜く function parse_url_hostname { local uri=$( parse_host_port_path $1 ) local hostname_port=${uri%%/*} local hostname=${hostname_port%%:*} echo $hostname } # URL から ポート番号を抜く function parse_url_port { local uri=$( parse_host_port_path $1 ) local hostname_port=${uri%%/*} local port=${hostname_port#*:} local hostname=${hostname_port%%:*} if [ "$hostname" == "$port" ]; then echo "" else echo $port fi } parse_url_scheme $1 parse_uid $1 parse_pass $1 parse_host_port_path $1 parse_url_hostname $1 parse_url_port $1