pwd | bla = nur letztes wort
- Voyager_MP
- Beiträge: 628
- Registriert: 22.06.2004 10:04:07
- Wohnort: Aachen
pwd | bla = nur letztes wort
Hi, ich muß aus einen PATH eine ebene herausschneiden, wobei ich nicht weiß wie sie heißt und wieviele ebenen davor liegen.
z.B.: PATH: /pub/fimware/falcon
jetzt muß ich immer das letzte wort haben, alles davor soll weggschmissen.
z.B.: PATH: /pub/fimware/falcon
jetzt muß ich immer das letzte wort haben, alles davor soll weggschmissen.
Gruß Michel
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: pwd | bla = nur letztes wort
hallo,
mit "basename" kannst du das prima abschneiden.
das problem ist nur, das $PATH evtl mehrere durch ein : getrennte pfade besitzt. Diese musste dann erst aufsplitten:
beispiel:
mit "basename" kannst du das prima abschneiden.
Code: Alles auswählen
$> basename /bla/blub/blää.mp3
blää.mp3
beispiel:
Code: Alles auswählen
$> echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
$> IFS=$':';for i in $PATH;do basename $i;done
bin
bin
bin
X11
games
Zuletzt geändert von finupsen am 10.04.2008 14:23:18, insgesamt 1-mal geändert.
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
Re: pwd | bla = nur letztes wort
Verstehe ich nicht ganz.
Meinst du etwa sowas?
Meinst du etwa sowas?
Code: Alles auswählen
daniel@daniel-laptop:~$ test=/pub/fimware/falcon
daniel@daniel-laptop:~$ echo $test
/pub/fimware/falcon
daniel@daniel-laptop:~$ echo $test | sed -ne 's/^.*\/\([A-Za-z0-9_-]\{1,\}\)$/\1/p'
falcon
daniel@daniel-laptop:~$ test=/pub/fimware/falcon/noch/mehr
daniel@daniel-laptop:~$ echo $test | sed -ne 's/^.*\/\([A-Za-z0-9_-]\{1,\}\)$/\1/p'
mehr
Oh, yeah!
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: pwd | bla = nur letztes wort
@duff
dein vorschlag geht leider nicht mit leerzeichen:
wenns denn mit sed sein soll:
ok... aber basename ist trotzdem einfacher
dein vorschlag geht leider nicht mit leerzeichen:
Code: Alles auswählen
$> TEST="/path/und/datei/leer zeichen";echo $TEST | sed -ne 's/^.*\/\([A-Za-z0-9_-]\{1,\}\)$/\1/p'
Code: Alles auswählen
$> TEST="/path/und/datei/leer zeichen";echo $TEST | sed -ne 's/^.*\/\(.*\)$/\1/p'
leer zeichen
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
- Voyager_MP
- Beiträge: 628
- Registriert: 22.06.2004 10:04:07
- Wohnort: Aachen
Re: pwd | bla = nur letztes wort
ne is klar, könnte mir vielleicht mal einer den sed kram erklären ?
Gruß Michel
Re: pwd | bla = nur letztes wort
Ok, stimmt. War nicht ganz so ausgereift von mir. Vorallem wenn Leerzeichen vorkommen.
War ja auch nur ein Beispiel
Klar, muss dir recht geben, dass die Variante mit basename einfacher ist.
Bin ich aber ehrlich gesagt nicht drauf gekommen.
[edit]
...so sollte es auch funktionieren
[/edit]
War ja auch nur ein Beispiel
Klar, muss dir recht geben, dass die Variante mit basename einfacher ist.
Bin ich aber ehrlich gesagt nicht drauf gekommen.
[edit]
Code: Alles auswählen
daniel@daniel-laptop:~$ test="/pub/fimware/falcon/mehr mit leerzeichen"
daniel@daniel-laptop:~$ echo $test | sed -ne 's/^.*\/\([A-Za-z0-9_-\ ]\{1,\}\)$/\1/p'
mehr mit leerzeichen
[/edit]
Oh, yeah!
Re: pwd | bla = nur letztes wort
Also zur Erklärung:
Zuerst einmal zu sed -ne:
der Teil 's/^.*\/\([A-Za-z0-9_-\ ]\{1,\}\)$/\1/p' steht für
s=substitute (also ersetzen)
p=print (ausgeben)
^.*\/ = sucht vom Anfang nach allen möglichen Zeichen gefolgt von / (welches durch \maskiert werden muss)
\( = Öffnen der Klammer zum Speichern des Ausdrucks
\) = Schließen der Klammer zum Speichern des Ausdrucks
[A-Za-z0-9_-\ ] = Gibt die Zeichenmenge an, nach der gesucht werden soll
\{1,\} = gibt an, dass Werte aus der Zeichenmenge mind. 1mal auftreten müssen. Das , bedeutet dann, dass diese so oft wie nötig auftreten dürfen
$ = das die Zeichenmenge, der Treffer zum Schluss steht/stehen
\1 = Ausgabe/Zugriff auf den gespeicherten Werte
Ungefähr so ist die Erklärung...
Zuerst einmal zu sed -ne:
Code: Alles auswählen
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
s=substitute (also ersetzen)
p=print (ausgeben)
^.*\/ = sucht vom Anfang nach allen möglichen Zeichen gefolgt von / (welches durch \maskiert werden muss)
\( = Öffnen der Klammer zum Speichern des Ausdrucks
\) = Schließen der Klammer zum Speichern des Ausdrucks
[A-Za-z0-9_-\ ] = Gibt die Zeichenmenge an, nach der gesucht werden soll
\{1,\} = gibt an, dass Werte aus der Zeichenmenge mind. 1mal auftreten müssen. Das , bedeutet dann, dass diese so oft wie nötig auftreten dürfen
$ = das die Zeichenmenge, der Treffer zum Schluss steht/stehen
\1 = Ausgabe/Zugriff auf den gespeicherten Werte
Ungefähr so ist die Erklärung...
Oh, yeah!
Re: pwd | bla = nur letztes wort
Hallo,
spricht eigentlich etwas gegen diese zeile?
Gruß fuzzy
spricht eigentlich etwas gegen diese zeile?
Code: Alles auswählen
pwd | sed 's#.*/##'
Re: pwd | bla = nur letztes wort
Ist noch besser und auch einfacher.fuzzy hat geschrieben:Hallo,
spricht eigentlich etwas gegen diese zeile?Gruß fuzzyCode: Alles auswählen
pwd | sed 's#.*/##'
Mal wieder zu kompliziert gedacht ;-(
Oh, yeah!
Re: pwd | bla = nur letztes wort
...DARF ES AUCH PURE BASH SEIN?
ÜBRIGENS FUNKTIONIERT AUCH... ...GANZ OHNE PIPE.
Code: Alles auswählen
$ TEST="/home/meine musik/blues und folk"
$ echo ${TEST##*/}
blues und folk
Code: Alles auswählen
echo ${PWD##*/}
Re: pwd | bla = nur letztes wort
Dass verstehe ich jetzt nicht wirklich.yeti hat geschrieben:...DARF ES AUCH PURE BASH SEIN?ÜBRIGENS FUNKTIONIERT AUCH...Code: Alles auswählen
$ TEST="/home/meine musik/blues und folk" $ echo ${TEST##*/} blues und folk
...GANZ OHNE PIPE.Code: Alles auswählen
echo ${PWD##*/}
Oh, yeah!
Re: pwd | bla = nur letztes wort
ICH WOLLTE NUR AUFZEIGEN, DASS MANCHER sed-AUFRUF DURCH bash-EIGENE KONSTRUKTE ÜBERFLÜSSIG WERDEN KANN. "man bash" IST DA RECHT ERHELLEND...Duff hat geschrieben:Dass verstehe ich jetzt nicht wirklich.
SOLLTE DAS NICHT ZUR URSPRÜNGLICHEN FRAGE PASSEN, DANN HAB ICH WOHL WAS NICHT VERSTANDEN...