разрезать строку на последний разделитель


14

У меня есть имя файла, как a.b.c.txt, я хочу, чтобы эта строка была разделена как

string1=a.b.c
string2=txt

В основном я хочу разделить имя файла и его расширение. Я использовал, cutно он расщепляется как a,b,cи txt. Я хочу разрезать строку на последний разделитель.

Может кто-нибудь помочь?

Ответы:


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

Красота кода!
Нам G VU

15

Есть много инструментов для этого.

Как вы использовали 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

Я бы использовал расширение параметра (если оболочка его поддерживает):

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

1
решение Bash элегантно.
törzsmókus

вырезать один делает только работу с фиксированным числом периодов!
törzsmókus

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

cutКоманда будет разграничить .и даст вам 4 факторов ( a, b, c, txt). Вышеприведенная команда выведет коэффициент от 1 до 3 (включен).

Или:

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

Вышеприведенная команда выведет коэффициент от 1 до 3 (включен).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.