"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

shell script, teil von zeile wegschneiden

pate 10.08.2007 - 00:53 1200 6
Posts

pate

trenbolon rockt
Avatar
Registered: Jun 2002
Location: hinter de 7 berg
Posts: 1374
Ich spiele mich schon den halben Abend herum, ich habe folgenden String in der Variablen $rardl
/this/is/a/dir/and/this/a.rar
ich möchte auf das ergebnis kommen:
/this/is/a/dir/and/this

ich dachte zuerst an cut, aber wie rückwärts anwenden? (mit / als delimiter und dann die ersten 6 felder nehmen und ausgeben geht nicht, weil die pfade später immer anders sein werden)
fix ist nur, dass immer alles nach dem letzten / weg muss.
tr geht auch nicht, weil auch der dateiname + endung sich ändern werden.

mit sed ginge es vermutlich, aber ich blick da noch nicht so durch.

bitte um hilfe
Bearbeitet von pate am 10.08.2007, 01:46

pate

trenbolon rockt
Avatar
Registered: Jun 2002
Location: hinter de 7 berg
Posts: 1374
ich habe jetzt, bei einem eigentlich nicht ganz ernst gemeinten versuch, die lösung gefunden, falls es wen interessiert:
Code:
rardlrev=$(echo $rardl | rev)
rardlrevcut=$(echo $rardlrev | cut -f1 -d"/" --complement)
rardldir=$(echo $rardlrevcut | rev)
kurz gesagt, den ganzen string umdrehen, bis zum ersten delimiter (/) cutten (komplementär davon nehmen) wieder mit rev umdrehen :D
pfusch, aber es geht

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Ein wenig eleganter wirds, wenn du alles in eine Zeile schreibst...

muh = $(echo $bla | rev | cut ... | rev)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Generisch:
Code:
dirname "/this/is/a/dir/and/this/a.rar"
bash:
Code:
myvar="/this/is/a/dir/and/this/a.rar";
echo "${myvar%/*}"

pate

trenbolon rockt
Avatar
Registered: Jun 2002
Location: hinter de 7 berg
Posts: 1374
@that
danke, hab ich eh jetzt so verwirklicht, war noch vom herumtesten in x variablen zerlegt.

@colossus

nette sache!
kannst du mir einen hint geben wie man das nennt, bzw wo kann ich nachlesen weshalb das mit dem %/* funktioniert, wieso man da { und nicht ( braucht, kurz, was ist die syntax?
sieht nämlich sehr interessant aus.

sorry bin neu auf dem gebiet und versuche mich gerade an 1001 unnötigen shell einzeilern um mir kleine aufgaben zu erleichtern :)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Bisschen was wird hier behandelt:
http://johannes.truschnigg.info/tut/bash-tut.sxhtml

(shameless plug ;))

Ansonsten: `man bash`, Kapitel "Parameter Expansion"

pate

trenbolon rockt
Avatar
Registered: Jun 2002
Location: hinter de 7 berg
Posts: 1374
Vielen Dank!
"Parameter Expansion" war das Schlagwort das ich gesucht habe :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz