2010-11-22 2 views

답변

0

bash 자체에는 포함되지 않습니다. sed와 같은 외부 도구에 위임해야합니다.

0

하지 수은을 잘 알고 있지만 URL을 사용하여, 당신은 두 개의 파이프

echo 'ssh://[email protected]/srv/hg/repo' |grep -E --only-matching '\[email protected]' |cut --delimiter=\@ -f 1 

아마 아닐 가장 효율적인 방법을하지만, 작동 할 수 있습니다.

3

당신은 꽤 많은 문장이 필요하거나 외부 도구를 호출해야합니다. 나는 sed가 이것을 위해 최선이라고 생각합니다.

url='default = ssh://[email protected]//srv/hg/repo' 

당신은 할 수 있습니다 :

[[ $url =~ //([^@]*)@ ]] 

그런 다음 사용자 이름이 여기에 있습니다 :

echo ${BASH_REMATCH[1]} 

이 작품

sed -r -e 's|.*://(.*)@.*|\1|' <<< "$default" 
+0

이전에 그 구조를 본 기억이 없습니다 -'<<<'- 그래서 저는 새로운 것을 배웠습니다. 보통 나는 변수를'sed'로 echo합니다; 이 구조가 더 효율적이라고 생각 하나? – Will

+0

에코와 파이프는 전체 문자열을 의미하는 반면, 여기서는 문자열이 처리 중에 있기 때문에 상상할 수 있습니다. – Sorpigal

4

가정 당신의 문자열이 같은 변수에 Bash 버전 3.2 이상.

관련 문제