我有一个字符串:http://user_name:user_password@example.com/gitproject.git
并希望在没有用户的情况下进行传递 - http://example.com/gitproject.git
即。
http://user_name:user_password@example.com/gitproject.git
到
http://example.com/gitproject.git
如何在bash中自动执行此操作?
答案 0 :(得分:2)
您可能安装的某些语言(如php或python)具有出色的URL解析功能。例如,php:
$url = parse_url("http://user_name:user_password@example.com/gitproject.git ");
return "$url[scheme]://" . $url['host'] . $url['path'];
但是,由于这不是您要求的,您仍然可以在sed
中执行此操作:
sed -r "s#(.*?://).*?@(.*)#\1\2#" <<<"http://user:pass@example.com/git"
答案 1 :(得分:2)
sed
应该有效:
s="http://user_name:user_password@example.com/gitproject.git"
sed 's~^\(.*//\)[^@]*@\(.*\)$~\1\2~' <<< "$s"
http://example.com/gitproject.git
使用纯BASH
echo "${s/*@/http://}"
http://example.com/gitproject.git
答案 2 :(得分:1)
使用sed
:
$ sed "s#//.*@#//#g" <<< "http://user_name:user_password@example.com/gitproject.git"
http://example.com/gitproject.git
答案 3 :(得分:1)
纯粹的bash可能性
var='http://user_name:user_password@example.com/gitproject.git'
pat='(http://).*?@(.*)'
[[ $var =~ $pat ]]
echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
http://example.com/gitproject.git