Zeichenkette am letzten Begrenzer abschneiden

14

Ich habe einen Dateinamen wie a.b.c.txt, ich möchte, dass diese Zeichenfolge als geteilt wird

string1=a.b.c
string2=txt

Grundsätzlich möchte ich den Dateinamen und seine Erweiterung aufteilen. Ich habe verwendet, cutaber es spaltet sich als a,b,cund txt. Ich möchte die Zeichenfolge am letzten Begrenzer abschneiden.

Kann jemand helfen?

chhaya vishwakarma
quelle

Antworten:

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
quelle
Schönheit des Codes!
Nam G VU
15

Dafür gibt es viele Tools.

Wie du benutzt hast 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

Ich hätte die Parametererweiterung verwendet (wenn die Shell dies unterstützt):

$ name='a.b.c.txt'
$ string1="${name%.*}"
$ string2="${name##*.}"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt
heemayl
quelle
1
Die Bash-Lösung ist elegant.
Törzsmókus
Der Schnitt funktioniert nur mit einer festen Anzahl von Perioden!
Törzsmókus
0
echo "a.b.c.txt" | cut -d. -f1-3

cutBefehl begrenzt .und gibt Ihnen 4 Faktoren ( a, b, c, txt). Der obige Befehl gibt den Faktor 1 bis 3 aus (eingeschlossen).

Oder:

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

Der obige Befehl gibt den Faktor 1 bis 3 aus (eingeschlossen).

Rohit Chaudhari
quelle