cortar corda no último delimitador


14

Eu tenho um nome de arquivo como a.b.c.txt, quero que essa sequência seja dividida como

string1=a.b.c
string2=txt

Basicamente, quero dividir o nome do arquivo e sua extensão. Eu usei, cutmas divide como a,b,ce txt. Eu quero cortar a corda no último delimitador.

Alguém pode ajudar?

Respostas:


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

Beleza do código!
Nam G VU

15

Existem muitas ferramentas para fazer isso.

Como você estava usando 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

Eu teria usado a expansão de parâmetros (se o shell suportar):

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

1
a solução do bash é elegante.
törzsmókus 8/08

o corte só funciona com um número fixo de períodos!
törzsmókus 8/08

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

cutcomando irá delimitar .e lhe dará 4 fatores ( a, b, c, txt). O comando acima imprimirá os fatores 1 a 3 (incluídos).

Ou:

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

O comando acima imprimirá o fator 1 até 3 (incluído).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.