couper la chaîne sur le dernier délimiteur

14

J'ai un nom de fichier comme a.b.c.txt, je veux que cette chaîne soit divisée en

string1=a.b.c
string2=txt

Fondamentalement, je veux diviser le nom de fichier et son extension. J'ai utilisé cutmais ça se fend au fur a,b,cet à mesure txt. Je veux couper la chaîne sur le dernier délimiteur.

Quelqu'un peut-il aider?

chhaya vishwakarma
la source

Réponses:

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
7171u
la source
Beauté du code!
Nam G VU
15

Il existe de nombreux outils pour ce faire.

Comme vous l'utilisiez 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

J'aurais utilisé l'expansion des paramètres (si le shell le supporte):

$ name='a.b.c.txt'
$ string1="${name%.*}"
$ string2="${name##*.}"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt
heemayl
la source
1
la solution bash est élégante.
törzsmókus
la coupe ne fonctionne qu'avec un nombre fixe de périodes!
törzsmókus
0
echo "a.b.c.txt" | cut -d. -f1-3

cutcommande délimitera .et vous donnera 4 facteurs ( a, b, c, txt). La commande ci-dessus imprime le facteur 1 à 3 (inclus).

Ou:

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

La commande ci-dessus imprime le facteur 1 à 3 (inclus).

Rohit Chaudhari
la source