tmade hat geschrieben:
Hallo Blattlaus,
das war genau das was ich gebraucht habe! Vielen Dank!!
Kannst du mir vielleicht auch noch den Code erklären?
Klar.
–-
grep "<ref HREF" /pfadzurdatei/XYZ* | sed 's/.*token=\(.*\)"\/>/\1/'
Als erstes wird der markierte Teil von der Shell auf der es ausgeführt wird vervollständig. Das Stück wird dabei durch alle verfügbaren Dateien auf die es passt, ersetzt. Befinden sich also in "/pfadzudatei/" drei Dateien die mit "XYZ" anfangen steht da hinterher:
grep "<ref HREF" /pfadzurdatei/XYZ_1 /pfadzurdatei/XYZ_2 /pfadzurdatei/XYZ_3 | sed 's/.*token=\(.*\)"\/>/\1/'
Grep kann mit mehreren Inputdateien umgehen, daher ist das keine Problem.
grep "<ref HREF" /pfadzurdatei/XYZ_1 /pfadzurdatei/XYZ_2 /pfadzurdatei/XYZ_3 | sed 's/.*token=\(.*\)"\/>/\1/'
Dann sucht Grep in jeder Datei, die es übergeben bekommen hat, nach einer Zeile auf die das Pattern (der markierte Teil) passt und gibt sie aus. Da würde dann also sowas rausfallen:
<ref HREF="mms://213.200.97.108/radiokoeln$livestream.wma?token=207b059d454e00564fcdf263a64c7642"/>
<ref HREF="mms://213.200.97.108/radiokoeln$livestream.wma?token=3465059d45gf34324f263a64cdf42"/>
<ref HREF="mms://213.200.97.108/radiokoeln$livestream.wma?token=asdb059d454asd345323a64c7652"/>
Jetzt kommt sed an die Reihe und führt für jede Zeile die es per stdin bekommt den Befehl aus (ich trenne den jetzt mal in mehrer Zeilen auf und schreibe kommentare dahintern):
s/ # Ersetze alles auf das foldendes Pattern zutrifft...
.* # beliebig viele Zeichen
token= # dann "token="
\( # Zwischenspeichern:
.* # beliebig viele Zeichen
\) # zwischenspeichern ende
"\/> # dann "/> (der Slash wurd maskiert)
/ # ...durch
\1 # den Inhalt von Zwischenspeicher 1
/ # ENDE
Und damit bleibt nur der Hash über und wird von sed ausgegeben. Thats it 😉