cortar cadena en el último delimitador


14

Tengo un nombre de archivo como a.b.c.txt, quiero que esta cadena se divida como

string1=a.b.c
string2=txt

Básicamente quiero dividir el nombre del archivo y su extensión. Solía cutpero se divide como a,b,cy txt. Quiero cortar la cadena en el último delimitador.

Alguien puede ayudar?

Respuestas:


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

Belleza del código!
Nam G VU

15

Hay muchas herramientas para hacer esto.

Como estabas 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

Hubiera utilizado la expansión de parámetros (si el shell lo admite):

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

1
La solución bash es elegante.
törzsmókus

¡el corte solo funciona con un número fijo de períodos!
törzsmókus

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

cutcomando delimitará .y le dará 4 factores ( a, b, c, txt). El comando anterior imprimirá el factor 1 a 3 (incluido).

O:

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

El comando anterior imprimirá el factor 1 hasta el 3 (incluido).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.