我们试图找到Mercurial URL的用户名:
有没有一行代码可以实现这个功能?
default = ssh://someone@acme.com//srv/hg/repo
假设总是有一个用户名,我想到了以下方法:
tmp=${a#*//}
user=${tmp%%@*}
有没有一行代码可以实现这个功能?
default = ssh://someone@acme.com//srv/hg/repo
假设总是有一个用户名,我想到了以下方法:
tmp=${a#*//}
user=${tmp%%@*}
url='default = ssh://someone@acme.com//srv/hg/repo'
您可以做以下操作:
[[ $url =~ //([^@]*)@ ]]
echo ${BASH_REMATCH[1]}
这适用于Bash 3.2及更高版本。
你几乎需要多个语句或调用外部工具。我认为sed最适合这种情况。
sed -r -e 's|.*://(.*)@.*|\1|' <<< "$default"
<<<
- 所以我刚学到了新东西。通常我会将变量“echo”到“sed”中; 我想这个结构更有效率? - Will这不是bash本身的功能。您需要委派给外部工具,例如sed。
虽然不熟悉mercurial,但使用您的url,您可以执行以下操作
echo 'ssh://someone@acme.com/srv/hg/repo' |grep -E --only-matching '\w+@' |cut --delimiter=\@ -f 1
也许使用两个管道不是最有效的方式,但它能够正常工作。