pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


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