find a substring inside a bash variable
本问题已经有最佳答案,请猛点这里访问。
我们试图找到一个mercurial url的用户名:
1 | default = ssh://someone@acme.com//srv/hg/repo |
假设总是有一个用户名,我想到了:
1 2 | tmp=${a#*//} user=${tmp%%@*} |
有没有一种方法可以做到这一点?
假设字符串在这样的变量中:
1 | url='default = ssh://[email protected]//srv/hg/repo' |
你可以做到:
1 | [[ $url =~ //([^@]*)@ ]] |
那么您的用户名在这里:
1 | echo ${BASH_REMATCH[1]} |
这在bash 3.2及更高版本中有效。
您几乎需要更多的那个语句,或者调用外部工具。我认为塞德最适合这样做。
1 | sed -r -e 's|.*://(.*)@.*|\1|' <<<"$default" |
不熟悉mercurial,但是使用你的URL,你可以
1 |
可能不是最有效的两个管道,但工程。
不在bash内部。你必须委托给一个外部工具,比如sed。