Hallo,
ich hätte eine Frage bzgl. Pattern Matching auf der Bash, irgendwie habe ich es nicht geschafft, ein Kommando zu finden, mit dem ich in einem String matchen kann, und nachher auf eine Gruppe die zum Pattern passt zugreifen kann. Anwendungsfall war nur ein kleines Skript, mit dem ich auf Knopfdruck die aktuellen Nachrichten von der ZDF mediathek im VLC spielen wollte, da ich öfters erst nach Mitternacht schau, sollte dabei noch geguckt werden, ob es schon nach 19 Uhr ist, und sonst der Tag um eins verringert. In der Web-Adresse ändert sich immer nur der Datumsindex, welcher die Form yymmdd hat, der Hauptteil ist also diesen String zu erstellen. Mein Skript schaut nun so aus:
#! /bin/bash mediaPreString="http://wstreaming.zdf.de/zdf/veryhigh/" mediaPostString="_h19.asx" date=`date --rfc-3339='seconds'` hour=`echo $date | sed 's:^[0-9]*-[0-9]*-[0-9]* ::g' | sed 's:\:.*::g'` mediaIndex=`echo $date | sed 's: .*::g' | sed 's:^20::g' | sed 's:-::g'` if [ $hour -le 19 ] then mediaIndex=$((mediaIndex-1)) fi mediaAddress=$mediaPreString$mediaIndex$mediaPostString vlc $mediaAddress
Es läuft auch, aber ich empfinde es als sehr unschön, dass ich immer hintereinander-pipen muss, und immer nur patterns rauslösche, anstatt einfach auf das was ich will zu matchen und es dann wiederzuverwenden. Darum dachte ich, vielleicht kann mir jemand im Forum, der sich besser auskennt (ich hab mit der Bash grad erst angefangen...) ne schönere / cleanere / kürzere Version sagen, damit ich für die Zukunft schlauer bin... Ich hätte zum Beispiel sowas gewollt wie
x=`echo $blah | identifizierePatternUndLiefereMatchZurueck("[0-9]*-[0-9]*-[0-9]*")`
So dass dann, wenn "$blah = 2011-07-11 13:45:00+02:00" zum Beispiel, hinterher in x der Wert 2011-07-11 gespeichert ist... Aber hab nix dazu gefunden... Oder geht das auf der Bash nicht? Aber ich meine, irgendwann mal sowas gelesen zu haben, glaube sogar mit sed, aber kann's einfach nicht mehr finden...
Vielen Dank auf alle Fälle für jeglichen Input ☺
PS: Was auch nicht geklappt hat, war auf eine exakte Anzahl zu matchen, obwohl doch sowas wie [0-9]{4} eine Regex sein müsste, die z.B. genau 4 digits matcht