Hallo,
Ich möchte einen String der Form *(laufwerk$$)* so zerkleinern, dass da am Ende nur noch laufwerk$$ ($ ist je eine Zahl) rauskommt, bekomme das grade aber überhaupt nicht gebacken. Kann mir jemand helfen?
MfG
|
Anmeldungsdatum: Beiträge: 302 |
Hallo, Ich möchte einen String der Form *(laufwerk$$)* so zerkleinern, dass da am Ende nur noch laufwerk$$ ($ ist je eine Zahl) rauskommt, bekomme das grade aber überhaupt nicht gebacken. Kann mir jemand helfen? MfG |
||
|
Anmeldungsdatum: Beiträge: 299 Wohnort: Freiburg im Breisgau |
Sind die Klammern denn wörtlich zu nehmen? Also so: echo "dsfiudfhsiu(laufwerk02)fdsljfsd"|sed -e "s/.*\(\\(laufwerk[0-9][0-9]\\)\).*/\1/g" ergibt: laufwerk02 Gruß, Gerald EDIT: Wobei es nicht funktioniert, wenn du mehrere Male (laufwerk[0-9][0-9]) in dem String hast. Von dem her kannst du das |
||
|
Supporter
Anmeldungsdatum: Beiträge: 914 |
Ciao robert |
||
|
Anmeldungsdatum: Beiträge: 3769 Wohnort: Wolfen (S-A) |
Sehe ich das richtig, dass Du nur einfach die *( und )* entfernen willst ? Das wäre mit sed ja sogar noch einfacher: echo '*(laufwerk$$)*' | sed 's/\*(//g; s/)\*//g' oder mit Parameter Expansion: var='*(laufwerk$$)*'
var="${var//\*(/}"
echo "${var//)\*/}"LG, track |
||
|
Supporter
Anmeldungsdatum: Beiträge: 914 |
|||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 302 |
Super danke, das funktioniert. Kann man das auch noch so abändern, dass es wenn der String laufwerk$$ mehrfach vorkommt, dieser durch einen delimiter (idealerweise ein ,) getrennt ausgegeben wird? //Edit: Neinnein, der Ausgangstring ist deutlich größer als ein (Laufwerk$$), sont wäre es ja zu einfach |
||
|
Anmeldungsdatum: Beiträge: 3769 Wohnort: Wolfen (S-A) |
Na ja, dann müsstest Du den mittleren, kombinierten Trennblock einfach vorher in ein Komma umwandeln, dann wird das auch gehen: echo '*(laufwerk$$)**(laufwerk42)*' | sed 's/)\*\*(/,/g; s/\*(//g; s/)\*//g' bzw.: var='*(laufwerk$$)**(laufwerk42)*'
var="${var//)\*\*(/,}"
var="${var//\*(/}"
echo "${var//)\*/}"Falls die Ersetzungen in Wirklichkeit anders aussehen, solltest Du mal ein echtes Beispiel zum probieren posten. track |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 302 |
Sorry, das hätte ich echt tun sollen. Es ist wie bei fckawe ein String nach dem Muster
wobei 0 und 2 jede Zahl (mit Grenze) zwischen 0 und 9 sein kann. |
||
|
Anmeldungsdatum: Beiträge: 252 Wohnort: Stockholm |
Wie wäre es mit grep? echo "$string" | grep -o 'laufwerk[0-9][0-9]' | tr '\n' ',' Einziger Nachteil, dann ist ein Komma am Ende der Ausgabe anstatt eines newline. Aber das bekommt man ja auch recht einfach weg. Je nachdem wie du es weiterverarbeitest. |
||
|
Anmeldungsdatum: Beiträge: 3769 Wohnort: Wolfen (S-A) |
Aber das (laufwerk03) kann in dem ganzen Müll auch mehrfach vorkommen, und außer um das laufwerk$$ herum gibt es sonst niemals Klammern ? Wenn das so stimmt, könntest Du in meinem Vorschlag die maskierten Sterne durch "alles außer Klammern" ersetzen, echo '*(laufwerk$$)**(laufwerk23)***' | sed 's/)[^()]*(/),(/g; s/^[^()]*(/(/; s/)[^()]*$/)/' track |
||
|
Supporter
Anmeldungsdatum: Beiträge: 914 |
Sehr schön! echo "$string" | grep -o 'laufwerk[0-9][0-9]' | tr '\n' ',' Das lässt sich einfach regeln: $ string='aaa*(laufwerk12)*bb*(laufwerk33)*aaa' 16:14:10 work$ echo "$string" | grep -o 'laufwerk[0-9][0-9]' | paste -s -d , - laufwerk12,laufwerk33 Ciao robert |
||
|
Anmeldungsdatum: Beiträge: 252 Wohnort: Stockholm |
Ja noch besser. |
||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 302 |
@grumpy: Das Problem ist dann aber, dass nur maximal einmal das Laufwerk$$ ausgegeben wird. @track: Nein, die Klammen können auch woanders vorkommen, nur das '(laufwerk' macht die Stelle eindeutig. Das Ganze ist wie gesagt die Ausgabe von "id", wenn du gerade unter einem Linux-System unterwegs bist, kannst du dir das ja mal angucken (der entsprechende PC hat kein Internet). Nur dass auf meinem System eben eine oder mehrere laufwerksgruppen vorhanden sind. Sorry für die Unklarheiten.. |
||
|
Supporter
Anmeldungsdatum: Beiträge: 914 |
Ist doch eine schöne Teamarbeit. Schönes WE! robert |
||
|
Anmeldungsdatum: Beiträge: 252 Wohnort: Stockholm |