2012-03-30 14 views
1

Wie bekannte Teilzeichenfolge aus der Zeichenfolge in sh abgeschnitten? Zum Beispiel habe ich Zeichenfolge "http://www.myserver.org/very/very/long/path/mystring" Ausdruck "http://www.myserver.org/very/very/long/path/" ist bekannt. Wie kann ich "mystring" bekommen?abgeschnittene bekannte Teilzeichenfolge sh

Danke.

Antwort

3

z. mit Perl:

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

z. unter Verwendung von sed:

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

z. wenn die Suchzeichenfolge in einer Variablen enthalten ist, hier variable. Verwenden Sie doppelte Anführungszeichen, um die Variable zu erweitern.

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

Ich wäre mit sed gegangen, aber das Prinzip gilt ... – brice

+0

Guter Punkt, sed Snippet auch hinzugefügt. – simonnordberg

+0

Verwenden Sie doppelte Anführungszeichen um den Ausdruck, damit die Variablen erweitert werden. Z.B. 'sed" s |^$ {shorturl} \ (. * \) $ | \ 1 | "'. Die Antwort wurde ebenfalls aktualisiert. – simonnordberg

1

Getestet unter/bin/dash

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

wo

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

Für weitere Lesung suchen "##" in man dash

Einige weitere Abbildungen:

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

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