2012-03-30 4 views
1

sh의 문자열에서 알려진 부분 문자열을 잘라내는 방법은 무엇입니까? 예를 들어, 문자열 "http://www.myserver.org/very/very/long/path/mystring" 표현 "http://www.myserver.org/very/very/long/path/"이 알려져 있습니다. "mystring"을 어떻게 얻을 수 있습니까?알려진 부분 문자열을 잘라 내기

감사합니다.

답변

3

예. perl 사용 :

echo "http://www.myserver.org/very/very/long/path/mystring" | perl -pe 's|^http://www.myserver.org/very/very/long/path/(.*)$|\1|' 

예 : sed 사용 :

echo "http://www.myserver.org/very/very/long/path/mystring" | sed 's|^http://www.myserver.org/very/very/long/path/\(.*\)$|\1|' 

예 : 검색 문자열이 변수에 보관되면 여기에 variable이라는 이름이 지정됩니다. 변수를 확장하려면 큰 따옴표를 사용하십시오. man dash

에서

S is the variable-name 
## remove largest prefix pattern 
*/ upto the last slash 

더 읽기를 들어, 검색/bin에 테스트

echo "http://www.myserver.org/very/very/long/path/mystring" | sed "s|^${variable}\(.*\)$|\1|" 
+0

나는 sed와 함께 갔을 것이지만 원칙은 적용된다. – brice

+0

좋은 지적으로 sed snippet도 추가되었다. – simonnordberg

+0

변수가 확장되도록 표현식을 큰 따옴표로 묶으십시오. 예 : 'sed "| $ {shorturl} \ (. * \) $ | \ 1 |"'. 답변도 업데이트되었습니다. – simonnordberg

1

/dash

$ S="http://www.myserver.org/very/very/long/path/mystring" && echo ${S##*/} 
mystring 

"##"좀 더 그림 :

$ S="/mystring/" ; echo ${S##*/} 

$ S="/mystring" ; echo ${S##*/} 
mystring 
$ S="mystring" ; echo ${S##*/} 
mystring