pwd | bla = nur letztes wort

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

pwd | bla = nur letztes wort

Beitrag von Voyager_MP » 10.04.2008 14:10:43

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.
Gruß Michel

Benutzeravatar
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

Beitrag von finupsen » 10.04.2008 14:19:10

hallo,


mit "basename" kannst du das prima abschneiden.

Code: Alles auswählen

$> basename /bla/blub/blää.mp3
blää.mp3
das problem ist nur, das $PATH evtl mehrere durch ein : getrennte pfade besitzt. Diese musste dann erst aufsplitten:
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ß.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: pwd | bla = nur letztes wort

Beitrag von Duff » 10.04.2008 14:23:12

Verstehe ich nicht ganz.
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!

Benutzeravatar
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

Beitrag von finupsen » 10.04.2008 14:32:41

@duff

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'
wenns denn mit sed sein soll:

Code: Alles auswählen

$> TEST="/path/und/datei/leer zeichen";echo $TEST | sed -ne 's/^.*\/\(.*\)$/\1/p'
leer zeichen
ok... aber basename ist trotzdem einfacher ;)
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: pwd | bla = nur letztes wort

Beitrag von Voyager_MP » 10.04.2008 14:46:45

ne is klar, ;) könnte mir vielleicht mal einer den sed kram erklären ?
Gruß Michel

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: pwd | bla = nur letztes wort

Beitrag von Duff » 10.04.2008 14:47:46

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]

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
...so sollte es auch funktionieren ;-)
[/edit]
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: pwd | bla = nur letztes wort

Beitrag von Duff » 10.04.2008 14:56:38

Also zur 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

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...
Oh, yeah!

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Re: pwd | bla = nur letztes wort

Beitrag von fuzzy » 11.04.2008 07:25:57

Hallo,

spricht eigentlich etwas gegen diese zeile?

Code: Alles auswählen

pwd | sed 's#.*/##'
Gruß fuzzy

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: pwd | bla = nur letztes wort

Beitrag von Duff » 11.04.2008 08:13:45

fuzzy hat geschrieben:Hallo,

spricht eigentlich etwas gegen diese zeile?

Code: Alles auswählen

pwd | sed 's#.*/##'
Gruß fuzzy
Ist noch besser und auch einfacher.
Mal wieder zu kompliziert gedacht ;-(
Oh, yeah!

yeti

Re: pwd | bla = nur letztes wort

Beitrag von yeti » 11.04.2008 09:35:15

...DARF ES AUCH PURE BASH SEIN?

Code: Alles auswählen

$ TEST="/home/meine musik/blues und folk"
$ echo ${TEST##*/}
blues und folk
ÜBRIGENS FUNKTIONIERT AUCH...

Code: Alles auswählen

echo ${PWD##*/}
...GANZ OHNE PIPE.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: pwd | bla = nur letztes wort

Beitrag von Duff » 11.04.2008 10:08:45

yeti hat geschrieben:...DARF ES AUCH PURE BASH SEIN?

Code: Alles auswählen

$ TEST="/home/meine musik/blues und folk"
$ echo ${TEST##*/}
blues und folk
ÜBRIGENS FUNKTIONIERT AUCH...

Code: Alles auswählen

echo ${PWD##*/}
...GANZ OHNE PIPE.
Dass verstehe ich jetzt nicht wirklich.
Oh, yeah!

yeti

Re: pwd | bla = nur letztes wort

Beitrag von yeti » 11.04.2008 11:31:46

Duff hat geschrieben:Dass verstehe ich jetzt nicht wirklich.
ICH WOLLTE NUR AUFZEIGEN, DASS MANCHER sed-AUFRUF DURCH bash-EIGENE KONSTRUKTE ÜBERFLÜSSIG WERDEN KANN. "man bash" IST DA RECHT ERHELLEND...

SOLLTE DAS NICHT ZUR URSPRÜNGLICHEN FRAGE PASSEN, DANN HAB ICH WOHL WAS NICHT VERSTANDEN...

Antworten