|
HamburgJoe
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Moin Moin, hänge mal wieder fest. Ich habe eine Datei. In dieser befindet sich in einer Zeile ein eindeutiger Name. Zum Beispiel "Sonnenuntergang".
In der zweiten Zeile befindet sich ein Link. Ziel soll es sein, dass der Name Sonnenuntergang den Dateinamen der neu erstellten Datei haben soll. In der nächsten Zeile steht ein Link. Dieser soll den Inhalt der eben gebildeten neuen Datei ergeben. Ich habe gedacht ich kann das mit SED lösen, stehe aber auf dem Schlauch, beziehungsweise habe schlichtweg nur gefährliches Halbwissen. 😉 Aufbau der Datei ist wie folgt (es gibt mehr Einträge, als nur diese drei):
Sonnenuntergang
https://irgendwas1.com
Meer
https://irgendwas2.com
See
https://irgendwas3.com Wie kann ich das Problem am besten angehen? Über Eure Hilfe würde ich mich sehr freuen. Vielen Dank vorab! Beste Grüße Joe
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13242
|
Dateinamen der Datendatei als erstes Argument beim Aufruf übergeben. | #!/bin/sh
[ -z "$DEBUG" ] || set -x
while read -r line; do
case "$line" in
http*) curl --silent "$line" > "$name" ;;
*) name="$line" ;;
esac
done < "$1"
|
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
rklm schrieb: Dateinamen der Datendatei als erstes Argument beim Aufruf übergeben. | #!/bin/sh
[ -z "$DEBUG" ] || set -x
while read -r line; do
case "$line" in
http*) curl --silent "$line" > "$name" ;;
*) name="$line" ;;
esac
done < "$1"
|
Moin, vielen Dank für Deine Hilfe. Aber damit kann ich leider nichts anfangen. Denn ich verstehe nicht was das Script macht. ☹
Wenn ich es so ausführe (was vermutlich/offensichtlich falsch ist), erhalte ich die Fehlermeldung:
"./script_test.sh: Zeile 8: : Datei oder Verzeichnis nicht gefunden" Ich habe das Script mal "script_test.sh" genannt. Würdest Du bitte ein bisschen Licht in mein Dunkel bringen? Danke und beste Grüße Joe ☺
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Wer lesen kann ist klar im Vorteil. Das Script läuft und tut was es soll. Vielen Dank! ☺
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13242
|
HamburgJoe schrieb: Wer lesen kann ist klar im Vorteil.
😀
Das Script läuft und tut was es soll.
Fein.
Vielen Dank! ☺
Danichfür. Brauchst Du noch Erläuterungen?
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Ja, bitte. Es macht nämlich doch nicht so ganz was es soll. Muss mir das Ergebnis mal eben anschauen und gucken was mir da die Daten zerhaut.
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Also, so Eindeutig wie ich dachte sind die Namen wohl doch nicht. Teilweise sieht der Original Dateiinhalt so aus: Wort AnderesWort - 2033 - 6.3
https://irgendwas.com
NeuesWort UndWiederWasAnderes - 2055 - 6.3 -
https://irgendwasanderes.com Teilweise stehen hinten an, Zahlen und/oder Bindestriche, wie oben zu sehen ist. Außerdem sind die erstellten Dateien leer und haben folgende Endung:
'Wort AnderesWort$'\r' Hinzukommt, dass ich nicht weiß wo in dem Script ich die Dateiendung *.txt vergeben kann. Ich bin also doch wieder ein bisschen lost. 😉 Über Eure Hilfe würde ich mich sehr freuen. Danke und beste Grüße Joe
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11278
|
HamburgJoe schrieb: Also, so Eindeutig wie ich dachte sind die Namen wohl doch nicht. Teilweise sieht der Original Dateiinhalt so aus: Wort AnderesWort - 2033 - 6.3
https://irgendwas.com
NeuesWort UndWiederWasAnderes - 2055 - 6.3 -
https://irgendwasanderes.com Teilweise stehen hinten an, Zahlen und/oder Bindestriche, wie oben zu sehen ist.
Und was davon soll im Dateinamen landen? Außerdem sind die erstellten Dateien leer und haben folgende Endung:
'Wort AnderesWort$'\r'
Dann hat deine Datei mit den Namen und URLs wohl Zeilenenden im Windows-Stil ('\r\n'). Hinzukommt, dass ich nicht weiß wo in dem Script ich die Dateiendung *.txt vergeben kann.
Was soll die Endung erhalten? Die Dateien, in denen die heruntergeladenen Daten gespeichert werden? Man könnte z.B. sowas auch mit python3 machen (benötigt das Paket python3-requests) - als ausführbar gemachte dl.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/usr/bin/env python3
import fileinput
import requests
import sys
headers = { # be nice to wikimedia: https://meta.wikimedia.org/wiki/User-Agent_policy
'User-Agent': 'My User Agent/1.0',
'From': 'youremail@example.com'
}
line_gen = fileinput.input()
for filename, url in zip(line_gen, line_gen):
r = requests.get(url.rstrip(), headers=headers)
try:
r.raise_for_status()
except requests.HTTPError as e:
print(e, file=sys.stderr)
else:
with open(filename.rstrip(), 'wb') as f:
f.write(r.content)
|
mit so einer data.txt:
Sonnenuntergang
https://upload.wikimedia.org/wikipedia/commons/6/6c/Corp2739.jpg
See
https://upload.wikimedia.org/wikipedia/commons/9/94/Vierwaldstaettersee.jpg
Meer
https://upload.wikimedia.org/wikipedia/commons/6/69/Madeira_k%C3%BCste.jpg
kann ich das so aufrufen:
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17630
|
Was ich noch nicht verstehe: Sollen alle https-Links in eine Datei die den Namen der vorigen Zeile hat gespeichert werden, also im ersten Beispiel Meer, See usw. (wieso .txt und nicht .html?) oder soll der allwissende User genau einen Namen als Argument übergeben, also Meer, See, "NeuesWort UndWiederWasAnderes - 2055 - 6.3 -"?
Wort AnderesWort - 2033 - 6.3
https://irgendwas.com
NeuesWort UndWiederWasAnderes - 2055 - 6.3 -
https://irgendwasanderes.com
Dem Hinweis auf Windowszeilenenden schließe ich mich vollumfänglich an. ☺ Angenommen der User weiß, wonach er sucht, und sucht nach einem Schlüsselwort:
| sed -n "/See/{n; p}" urlaub.html > See.txt
#
# besser für Massenverarbeitung geeignet:
key=See; sed -n "/$key/{n; p}" urlaub.html > $key.txt
# Mit Leerzeichenvorsicht:
key="Zoll am See"; sed -n "/$key/{n; p}" urlaub.html > "$key".txt
|
Wenn man einen Text sucht, der auch Teil eines längeren Textes ist, aber man will auf ganze Wörter matchen: | echo -e "Seefeld\nhttps://irgendwas4.com" >> urlaub.html
sed -n "/\bSee\b/{n; p}" urlaub.html
# -n gibt per Default nichts aus, {n; p} sagt, dass die nächste Zeile gelesen werden soll
# und dann ausnahmsweise doch geprinted wird.
# findet Seefeld nicht, da /bSee/b auf Wortgrenzen (Wordboundaries) matcht.
echo -e "Zoll am See\nhttps://irgendwas4.com" >> urlaub.html
sed -n "/^See$/{n; p}" urlaub.html
# findet auch "Zoll am See" nicht, da auf ganze Zeilen gematcht wird.
|
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Moin an alle, erstmal danke für Eure Hilfe. Um vielleicht ein bisschen Licht ins Dunkel zu bringen, es handelt sich bei der Originaldatei um eine m3u. In dieser befindet sich in Zeile 1 ein Filmtitel, in Zeile 2 der Link zum Filmtitel. Nein nichts illegales, kein Kino.to, oder wie die Seiten heißen, oder hießen. Die Datei ist so aufgebaut (die ganzen Sonderzeichen habe ich bereits per sed entfernt):
Filmtitel1
https://irgendwas1.com
Filmtitel2
https://irgendwas2.com
Filmtitel3
https://irgendwas3.com
Filmtitel4
https://irgendwas4.com
...
Es soll nun je Titel eine neue Datei mit der Endung *.strm erstellt werden.
Inhalt der Datei soll dann nur der eine entsprechende Link sein. Quasi so: Filmtitel1.strm
Einziger Inhalt der Datei ist dann https://irgendwas1.com'' - Filmtitel2.strm nur mit dem Inhalt https://irgendwas2.com'' und so weiter... Die Quell m3u ist mit meinem eigenem Content gefüllt. Ich tue hier also nichts illegales und würde mich über Eure Hilfe freuen. Danke und beste Grüße Joe
|
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3793
|
Ohne Anspruch auf Vollkommenheit ... | for line in $(fgrep "http" quell.m3u);do titel=$(cat quell.m3u | grep $line -B1 | grep -v $line);echo $line | tee $titel.strm;done
|
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17630
|
| while read title
do
read url
echo $url > $title
done < sample.m3u
|
Das liest eine Zeile, den (Datei/Medien)-Titel, liest die Url, gibt die Url in eine Datei mit dem Titel aus und das, solange Zeilen nachkommen, und liest aus der Datei sample.m3u. Wenn die Zieldatei title.txt heißen soll, dann lenke es nach $title.txt um. Bereits oben gesagtes zu Leerzeichen in Titelnamen gilt auch hier. | t530:~/proj/mini/forum 🐧> l Filmtitel*
-rw-rw-r-- 1 stefan stefan 23 Apr 6 04:54 Filmtitel1
-rw-rw-r-- 1 stefan stefan 23 Apr 6 04:54 Filmtitel2
-rw-rw-r-- 1 stefan stefan 23 Apr 6 04:54 Filmtitel3
-rw-rw-r-- 1 stefan stefan 23 Apr 6 04:54 Filmtitel4
t530:~/proj/mini/forum 🐧> cat Filmtitel*
https://irgendwas1.com
https://irgendwas2.com
https://irgendwas3.com
https://irgendwas4.com
|
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Moin an alle! Als erstes 1000 Dank an Euch. Es hat nun alles geklappt. Habe mir noch das Tool dos2unix geladen und die Sourcefile entsprechend bearbeitet. Jetzt läuft es, wie ich es mir vorgestellt habe. Besten Dank an alle! ☺ Joe
|