Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

(gelöst) Pfad aus string extrahieren

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
droda
Newbie
Newbie
Beiträge: 5
Registriert: 31. Mai 2018, 08:04

(gelöst) Pfad aus string extrahieren

Beitrag von droda » 4. Jun 2018, 22:56

Hallo mitteinander,

an diesem kleinen Problem Sitze ich nun mehr als 3 Tage.
Hatte vor selbst auf eine Lösung zu kommen, bin aber nun zu dem Schluss gekommen, das ich selbst auf keine komme.

Ich habe es mit sed, grep, etc. durch probiert, aber bisher nichts passendes dabei.


Ich hab eine Variable, diese so aussieht, kann aber variieren.
Es gibt aber immer nur einen Pfad.
Aus diesem möchte ich nun die ersten beide Teile vom Pfad extrahieren.
Bsp.: test=xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin
Also: /pfad1/pfad2/


Diese möchte ich per echo ausgeben.

Also echo $test | sed/grep etc...

Eigentlich müsste ich eigentlich nur das erste / finden und noch bis zu zwei weitere markieren.
Ich habe sicherlich über 50 Kombinationen probiert, aber bis auf "/pfad1/pfad2/pfad3/pfad4/test" bin ich nicht weiter gekommen.

Vielen Dank und viele Grüße
Zuletzt geändert von droda am 4. Jun 2018, 23:44, insgesamt 1-mal geändert.

Werbung:
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4270
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Pfad aus string extrahieren

Beitrag von framp » 4. Jun 2018, 23:24

Das Stichwort ist hier reguläre Ausdrücke (regular Expression). Diese kannst du sowohl bei sed als auch grep benutzen um genau den Teil aus dem String zu extrahieren den du benötigst :wink:

droda
Newbie
Newbie
Beiträge: 5
Registriert: 31. Mai 2018, 08:04

Re: Pfad aus string extrahieren

Beitrag von droda » 4. Jun 2018, 23:43

Danke,

mit regex kenne ich mich schon halbwegs aus.

Trotzdem bin ich nicht weiter gekommen... Bis jetzt.
Wirklich gerade die Lösung für mich gefunden...

| grep -o -E "\/[[:alnum:]]+\/[[:alnum:]]+\/"

Ist beliebig erweiterbar.

Gräfin Klara
Hacker
Hacker
Beiträge: 333
Registriert: 23. Jun 2008, 20:51

Re: (gelöst) Pfad aus string extrahieren

Beitrag von Gräfin Klara » 5. Jun 2018, 00:04

Ich habe das nicht ausprobiert, aber das kannst du selbst nachholen

# VAR="xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin"
# echo $(grep -P -o "\/\w+\/\w+\/" <<< "$VAR")

Gruß
Gräfin Klara

abgdf
Guru
Guru
Beiträge: 3111
Registriert: 13. Apr 2004, 21:15

Re: (gelöst) Pfad aus string extrahieren

Beitrag von abgdf » 5. Jun 2018, 02:26

Code: Alles auswählen

#!/bin/bash
test=xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin
echo $test | awk -F "/" '{printf "/%s/%s/\n", $2, $3}'
Wenn man was zu splitten hat, ist awk ganz praktisch.
Perl tut's auch, robi findet aber, der Interpreter sei dafür übermäßig groß. awk ist sicher kleiner.

Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4270
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: (gelöst) Pfad aus string extrahieren

Beitrag von framp » 5. Jun 2018, 10:40

abgdf hat geschrieben:
5. Jun 2018, 02:26
Wenn man was zu splitten hat, ist awk ganz praktisch.
cut ist da noch praktischer und lightweight ;)

Code: Alles auswählen

t="xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin"; cut -f 2-3 -d / <<< "$t"
Eine Variante mit sed:

Code: Alles auswählen

t="xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin"; sed -r 's/[^:]+:((\/[^/]+){2})(.*)/\1/' <<< "$t"
Eine reine bash Variante mit read:

Code: Alles auswählen

t="xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin"; IFS='/' read x a b y <<< "$t"; echo "/$a/$b"
Eine reine bash Variante mit set:

Code: Alles auswählen

t="xxxxx:/pfad1/pfad2/pfad3/pfad4/test.bin"; IFS=/ eval set -- \$t; echo "/$2/$3"
Die beiden letzten sind vermutlich die schnellsten Varianten.

Antworten