split eines Strings

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

split eines Strings

Beitrag von Generic1 » 23.11.2012 12:41:27

Hi,

ich hätte noch eine Frage zu einem split, ich habe einen String der so lautet:

Code: Alles auswählen

Hallo/ich /bins/wer/bist/du
ich möchte diesen String jetzt so splitten, dass ich nur die letztz Silbe dieses Strings bekomme -> also die silbe "du".
weiß jemand wie ich das machen kann mit sed o.ä.
die Funktion split kennt mein CommanLine- Interpreter nicht - es müsste also mit sed o.ä. gehen.

Besten Dank für die hilfe.
lg
Generic1

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: split eines Strings

Beitrag von r900 » 23.11.2012 12:49:24

Code: Alles auswählen

string='Hallo/ich /bins/wer/bist/du'
echo "${string##*/}"
Einfache Variablenersetzung. Mit ##*/ wird alles vom Anfang bis zum letzten Schrägstrich entfernt. Die Variable string bleibt dabei übrigens unverändert.

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: split eines Strings

Beitrag von Generic1 » 23.11.2012 13:11:12

Besten Dank!!!
lg

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: split eines Strings

Beitrag von Cae » 23.11.2012 14:25:14

Wenn du wirklich Silbe meinst, dann sollte man nicht an den Slashes / trennen, sondern zumindest am vorderen Ende des letzten Wortes. "Echte" Silben sind wohl nochmal komplizierter.

Code: Alles auswählen

$ echo 'test/ string /foo/bar / baz fnord/cut' | sed 's/.*\<//'
cut
Oder am letzten / trennen (das Shell-Builtin ist allerdings schneller als ein geforktes sed):

Code: Alles auswählen

$ echo 'test/ string /foo/bar / baz fnord/cut' | sed 's/.*\///'
cut
Das hat aber beides nichts mit einem "echten" split() zu tun, da wird gar nicht nach Feldern untersucht. Das waere die Domaene von awk:

Code: Alles auswählen

$ echo 'test/ string /foo/bar / baz fnord/cut' | mawk -F/ '{ print $NF }' # letztes Feld
cut
$ echo 'test/ string /foo/bar / baz fnord/cut' | mawk -F/ '{ print $6 }' # Feld Nummer 6
cut
Noch einfacher ist allerdings cut, awk ist da overkill:

Code: Alles auswählen

$ echo 'test/ string /foo/bar / baz fnord/cut' | cut -d/ -f 6
cut
Damit haettest du nun sechs Loesungen, von denen fuenf das gleiche tun. Entscheide dich. :P

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: split eines Strings

Beitrag von Meillo » 23.11.2012 17:27:58

Cae hat geschrieben: Damit haettest du nun sechs Loesungen, von denen fuenf das gleiche tun. Entscheide dich. :P
Da hast du dir so viel Muehe gegeben, aber gegen den Ansatz von r900 siehst du doch alt aus. :-P


Nicht desto trotz schaetze ich es sehr wenn in Threads mehr als nur eine Loesung erarbeitet wird. Insofern danke ich dir fuer deinen Beitrag.
Use ed once in a while!

Antworten