2012-05-27 21 views
10

przykład wyrażenie:Jak podzielić ciąg na ukośnik w bash

/gasg/string

oczekiwany wynik: string

znaków do usunięcia: wszystkie znaki między "/" Symbole, w tym symbole

+0

'batween"/"symbols' Co powinno zająć, jeśli jest tylko jeden ukośnik, lub nie ma żadnych szwów? Lub tekst przed pierwszym ukośnikiem? –

Odpowiedz

13

z sed:

$ echo "/gasg/string" | sed -e 's/\/.*\///g' 
string 

Z buil w bash ciąg manipulacji:

$ s="/gag/string" 
$ echo "${s##/*/}" 
string 

struny wyglądają dokładnie jak ścieżek Unix. Dlatego można też użyć narzędzia basename - to returnes ostatnią porcję danego Unix ścieżki:

$ basename "/gag/string" 
string 
# It works with relative paths and spaces too: 
$ basename "gag/fas das/string bla bla" 
string bla bla 
+0

Pierwszy ukośnik w rozszerzeniu parametrów nie jest konieczny. Cytaty dotyczące zadania są w tym przypadku niezbędne, ale powinieneś używać ich do ekspansji z przyzwyczajenia. –

+0

Zgadzam się, że pierwsze '/' nie jest konieczne, ale dodałem je, aby zilustrować ten punkt. –

+0

Twoje struny wyglądają dokładnie tak, jak nazwy ścieżek Unix. - Tak, miałem zamiar zdobyć ostatnią partię podanej ścieżki i przy użyciu nazwy płyty tak samo jak "find -exec basename {} \;" co jest dla mnie genialne! Dziękuję za wskazówkę. – user1306777

10

awk także - użyj ukośnika jako separatora i druku ostatniego pola

echo "/gas/string" | awk -F/ '{print $NF}' 

lub wyciąć - ale że będzie działać tylko wtedy, gdy mają taką samą liczbę katalogów strip

echo "/gasg/string" |cut -d/ -f 3 
2

można użyć bash łańcuchach