2015-06-03 6 views

Odpowiedz

7

Nie. Ryba ma znacznie mniejszy zestaw funkcji niż bash, powołując się na poleceniach zewnętrznych:

$ set filename foo.bar.baz 
$ set rootname (echo $filename | sed 's/\.[^.]*$//') 
$ echo $rootname 
foo.bar 
+0

Dzięki, to jest to, co podejrzewałem. Dobrze, że napisałeś obejście :) –

6

Jeśli znasz rozszerzenie (np _bak, wspólna USECASE) Jest to prawdopodobnie bardziej wygodne:

for f in (ls *_bak) 
    mv $f (basename $f _bak) 
end 
2

z string match funkcja wbudowana w ryby można zrobić

set rootname (string match -r "(.*)\.[^\.]*\$" $filename)[2] 

meczu ciąg zwraca listę 2 pozycji. Pierwszy to cały łańcuch, a drugi to pierwsze dopasowanie do wyrażenia regularnego (rzeczy wewnątrz nawiasów w regexie). Tak więc, pobieramy drugą z [2].

Powiązane problemy