【发布时间】:2011-05-14 00:31:14
【问题描述】:
我们试图找到一个 mercurial url 的用户名:
default = ssh://someone@acme.com//srv/hg/repo
假设总是有一个用户名,我想出了:
tmp=${a#*//}
user=${tmp%%@*}
有没有办法在一行中做到这一点?
【问题讨论】:
-
在两个操作之间使用分号(而不是换行符)算数吗?
标签: bash
我们试图找到一个 mercurial url 的用户名:
default = ssh://someone@acme.com//srv/hg/repo
假设总是有一个用户名,我想出了:
tmp=${a#*//}
user=${tmp%%@*}
有没有办法在一行中做到这一点?
【问题讨论】:
标签: bash
假设您的字符串在这样的变量中:
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;我想这个结构更有效?
不在 bash 本身内。您必须委派给 sed 等外部工具。
【讨论】:
不熟悉mercurial,但是使用你的url,你可以做
echo 'ssh://someone@acme.com/srv/hg/repo' |grep -E --only-matching '\w+@' |cut --delimiter=\@ -f 1
这两个管道可能不是最有效的方法,但有效。
【讨论】: