Wytnij ciąg na ostatnim separatorze


14

Mam nazwę pliku a.b.c.txt, chcę, aby ten ciąg był podzielony jako

string1=a.b.c
string2=txt

Zasadniczo chcę podzielić nazwę pliku i jego rozszerzenie. Użyłem, cutale dzieli się jak a,b,ci txt. Chcę wyciąć ciąg na ostatnim separatorze.

Czy ktoś może pomóc?

Odpowiedzi:


25
 #For Filename
 echo "a.b.c.txt" | rev | cut -d"." -f2-  | rev
 #For extension
 echo "a.b.c.txt" | rev | cut -d"." -f1  | rev

Piękno kodu!
Nam G VU

15

Jest na to wiele narzędzi.

Jak korzystałeś cut:

$ string1="$(cut -d. -f1-3 <<<'a.b.c.txt')"
$ string2="$(cut -d. -f4 <<<'a.b.c.txt')"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt

Użyłbym rozszerzenia parametrów (jeśli powłoka je obsługuje):

$ name='a.b.c.txt'
$ string1="${name%.*}"
$ string2="${name##*.}"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt

1
rozwiązanie bash jest eleganckie.
törzsmókus

cięcie jeden ma tylko pracę ze stałą liczbę okresów!
törzsmókus

0
echo "a.b.c.txt" | cut -d. -f1-3

cutPolecenie to rozgraniczenie .i daje 4 czynniki ( a, b, c, txt). Powyższe polecenie wyświetli współczynnik od 1 do 3 (w zestawie).

Lub:

echo "a.b.c.txt" | cut -d -f-3

Powyższe polecenie wyświetli współczynnik 1 do 3 (w zestawie).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.