使用正则表达式更改变量值

时间:2013-10-04 13:50:30

标签: regex bash sed

我有一个字符串: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中自动执行此操作?

4 个答案:

答案 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