Sed-Einzeiler zur Bearbeitung von Streamdatei

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 01.01.2017 20:39:03

Irgendwie geht im neuen Jahr einiges so ziemlich schief, Im Nachhinein stelle ich fest, daß mein letzter Beitrag gar nicht auftaucht.
Ich möchte hier nochmals allen Danken.Der letzte Beitrag von rodney hats auf den Punkt gebracht, das was ich eigentlich machen wollte :lol: Danke rodney
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 06.01.2017 22:17:55

Wie kann/könnte ich (noch) :) mit sed 2 Zeileninhalte, j-die jeweils zusammengehören- in der Datei, umkehren?
Hört sich kompliziert an, ist aber nicht so.

Beispiel:

#DESCRIPTION ....irgedwas
#SERVICE 4097....irgendwas
#DESCRIPTION ....irgedwas
#SERVICE 4097....irgendwas
#DESCRIPTION ....irgedwas
#SERVICE 4097....irgendwas
#DESCRIPTION ....irgedwas
#SERVICE 4097....irgendwas
usw.

Wie gesagt, Zeile 1>--->Zeile 2,, Zeile 3 <--->Zeile 4, Zeile 5 <---> Zeile 6, also zu einem paar die Pl#tze tauschen und das bis ans Ende der Datei.

Ist das möglich?
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von heisenberg » 06.01.2017 22:31:12

Mal aus dem hohlen Bauch heraus geraten...

Code: Alles auswählen

awk 'NR%2==1{b=$0;next}{print $0,b}'
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 06.01.2017 23:34:41

Zeilen tauschen:

Code: Alles auswählen

sed -n 'h;n;G;p'
(Kurzerklaerung: Zeile speichern, naechste Zeile einlesen, gespeicherte Zeile anhaengen, ausgeben.)
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von heisenberg » 07.01.2017 01:03:06

Code: Alles auswählen

perl -pe '$_=<>.$_'
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 09.01.2017 00:22:46

Code: Alles auswählen

    sed -n 'h;n;G;p'


(Kurzerklaerung: Zeile speichern, naechste Zeile einlesen, gespeicherte Zeile anhaengen, ausgeben.)
@meillo
Ich bin überwältigt von dieser kurzen aber wirkungsvollen Lösung,perfekt!Danke meillo,toll ausgeführt :wink:
Danke euch allen. :THX:

@meillo

Code: Alles auswählen

 
1    (DE) Mei Musi TV
2    http://ixxxxxxxxxxxxxxxxxxxxxx.ts
3    (DE) MeinTVshop
4    http://xxxxxxxxxxxxxxxxxxxxxxx.ts
5    (DE) München TV
6    http://ixxxxxxxxxxxxxxxxxxxxxxx.ts
7    (DE) Regio TV
8    http://xxxxxxxxxxxxxxxxxxxxxxxx.ts
9    (DE) RFO
10  http://xxxxxxxxxxxxxxxxxxxxxxxxx.ts
Wie kann ich jetzt bspw. den Sendernamen der ersten Zeile "(DE) Mei Musi TV" an das Ende der 2.Zeile hinter "ts" mit Doppelpunkt(:) anhängen?Selbe gilt bis ans Ende der Datei.

Als Beispiel:

Code: Alles auswählen

1 http://ixxxxxxxxxxxxxxxxxxxxxx.ts: (DE) Mei Musi TV 
Die Zeilennummern dienen hier nur zur Verdeutlichung, zum Verständis.
Wie erwähnt, von oben nach ganz unten den jeweiligen Sendernamen mit ":" an die Erweiterung der entsprechenden "ts" anhängen.
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von FragDenPinguin » 09.01.2017 02:27:04

Code: Alles auswählen

sed -n 'h;n;s/\.ts/\.ts\:/;G;s/\n//;s/^[ ]*//;s/\.ts\:[ ]*/\.ts: /;p'

Code: Alles auswählen

http://ixxxxxxxxxxxxxxxxxxxxxx.ts: (DE) Mei Musi TV
http://xxxxxxxxxxxxxxxxxxxxxxx.ts: (DE) MeinTVshop
http://ixxxxxxxxxxxxxxxxxxxxxxx.ts: (DE) München TV
http://xxxxxxxxxxxxxxxxxxxxxxxx.ts: (DE) Regio TV
http://xxxxxxxxxxxxxxxxxxxxxxxxx.ts: (DE) RFO

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 10:24:19

tHoRax hat geschrieben: Wie kann ich jetzt bspw. den Sendernamen der ersten Zeile "(DE) Mei Musi TV" an das Ende der 2.Zeile hinter "ts" mit Doppelpunkt(:) anhängen?Selbe gilt bis ans Ende der Datei.
Ganz einfach, nach dem Zusammenhaengen der Zeilen (G-Kommando) ersetzt du den Zeilenumbruch durch ``: '':

Code: Alles auswählen

sed -n 'h;n;G;s/\n/: /;p'
;-)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 10:27:42

btw:
heisenberg hat geschrieben:

Code: Alles auswählen

perl -pe '$_=<>.$_'
Das finde ich auch einen netten Ansatz, wegen der dahinter stehenden Denkweise. Dafuer mag ich Perl dann doch. :-)
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von heisenberg » 09.01.2017 10:53:40

Einen hätte ich noch:

Code: Alles auswählen

awk '{getline b;print b"\n"$0}'
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 11:12:13

heisenberg hat geschrieben:Einen hätte ich noch:

Code: Alles auswählen

awk '{getline b;print b"\n"$0}'
Und so, wenn man das gleich an die neuesten Anforderungen anpasst:

Code: Alles auswählen

awk '{getline b;print b": "$0}'
Use ed once in a while!

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 09.01.2017 11:14:09

einfach toll dieses Forum! :THX:
@meillo
Eigentlich hätte ich dir schreiben sollen, dass du mir dafür gleich einen Sedscript verfassen sollst, welches für mich von einen Website die aktuellen .m3u-Dateien runterlädt und diese mittels sed für die Settings meiner enigma2 Box umwandelt, aber das lass ich mal :wink:
@meillo immer zur Stelle, wo man seine Unterstützung braucht,nochmals vielen herzlichen Dank.
Man lernt nie aus,selbst mit 50+ :D Ich sitze stundenlang vorm PC,mir raucht manchmal der Kopf, um eine Aufgabe mit sed usw. zu lösen.Bis man dann auf eine einfache Lösung kommt :idea:
@all
Danke.
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 11:15:56

Meillo hat geschrieben:

Code: Alles auswählen

sed -n 'h;n;G;s/\n/: /;p'
Den letzten Strichpunkt kann man sich uebrigens noch sparen:

Code: Alles auswählen

sed -n 'h;n;G;s/\n/: /p'
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 11:17:11

tHoRax hat geschrieben:einfach toll dieses Forum! :THX:
Das finde ich auch. Diese Aufgabe hat mir viel Vergnuegen bereitet. :THX:
Use ed once in a while!

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 09.01.2017 11:31:38

@meillo
Doch noch zu früh gefreut :x
Die obere Zeile sollte bestehen bleiben und nur der jeweilige Sendername, welches in der oberen Zeile steht einfach am Ende der nächsten Zeilen mit ":" eingefügt werden.Es war mein Fehler. Die obere Zeile muss immer bleiben.

Code: Alles auswählen

#DESCRIPTION NATIONAL GEOGRAPHIC CHANNEL
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a//xxxx.ts:NATIONAL GEOGRAPHIC CHANNEL
#DESCRIPTION NAT GEO WILD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a//xxxx.ts:NAT GEO WILD
Sollte so formatiert werden.
Erst die Zeile mit #DESCRIPTION NATIONAL GEOGRAPHIC CHANNEL, nur die darauffolgende Zeile erhält den Sendernamen am Ende mit ":" dazu.
Dein Ansatz hat die erste Zeile immer gelöscht,welches mein Fehler war.
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 11:47:04

Es ist etwas muehsam staendig mit Pseudo-Daten arbeiten zu muessen, weil man nie weiss was nun anonymisiert ist, was Fixtext ist, was Fuelltext ist, ob das Beispiel vereinfacht ist, etc. Besser du lieferst deine realen Daten und anonymisierst ggf. den variablen Text zeichenklassenerhaltend (z.B. jeden Kleinbuchstaben zu `a', Jeden Grossbuchstaben zu `A', jede Zahl zu `0', den Rest lassen).

Hier mein Vorschlag (basierend auf meiner Vermutung was die Ausgangsdaten sind):

Code: Alles auswählen

sed 'h;n;G;s/\n#DESCRIPTION /:/'
Use ed once in a while!

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 09.01.2017 12:11:12

hallo meillo.

Code: Alles auswählen

#DESCRIPTION DE | a.tv uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1430.ts
#DESCRIPTION DE | KiKA uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iurl1429.ts
#DESCRIPTION DE | Pro7 MAXX / ProSiebenSat.1 uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1506.ts
#DESCRIPTION DE | Pro7
Soweit bin ich jetzt schon, nur muss noch der jeweilige Sendername in der "#DESCRIPTION DE | " - Zeile unten am Ende der zugehörigen "#SERVICE" - Zeile mit "." eingefügt werden.
Eine #DESCRIPTION- und eine #SERVICE-Zeile gehören jeweils zueinander,von oben nach unten der Datei.

Jetzt muss ich aber zur Arbeit,danke meillo :wink: :D
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 09.01.2017 12:48:27

Danke fuer die Ausgangsdaten.
tHoRax hat geschrieben: Soweit bin ich jetzt schon, nur muss noch der jeweilige Sendername in der "#DESCRIPTION DE | " - Zeile unten am Ende der zugehörigen "#SERVICE" - Zeile mit "." eingefügt werden.
Das erledigt mein Befehl vom letzten Post, ich musste nur noch den Fixtext von #DESCRIPTION im s-Kommando den geaenderten Anforderungen ;-) anpassen, siehe:

Code: Alles auswählen

:-L sed 'h;n;G;s/\n#DESCRIPTION DE | /:/' <<!
> #DESCRIPTION DE | a.tv uuu
> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1430.ts
> #DESCRIPTION DE | KiKA uuu
> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iurl1429.ts
> #DESCRIPTION DE | Pro7 MAXX / ProSiebenSat.1 uuu
> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1506.ts
> #DESCRIPTION DE | Pro7
> !
#DESCRIPTION DE | a.tv uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1430.ts:a.tv uuu
#DESCRIPTION DE | KiKA uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iurl1429.ts:KiKA uuu
#DESCRIPTION DE | Pro7 MAXX / ProSiebenSat.1 uuu
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://url/1506.ts:Pro7 MAXX / ProSiebenSat.1 uuu
#DESCRIPTION DE | Pro7
Use ed once in a while!

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von FragDenPinguin » 09.01.2017 14:11:57

Ich finde den Thread auch 'nice', denn dank Meillos Post :THX: habe ich endlich ungefähr kapiert, was das "kryptische Zeug" ala

Code: Alles auswählen

sed -n 'h;n;G;p'
zu bedeuten hat. Der Unterschied von 'g' und 'G' ist z.B., dass 'G' das Gespeicherte am Ende der aktuellen Zeile einfügt, während 'g' die aktuelle Zeile mit dem Gespeicherten überschreibt. Eigentlich ja recht einfach. Das wird sicherlich noch einmal nützlich sein.

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 10.01.2017 00:29:50

@meillo.

Die ursprüngliche Datei(*m3u), welche ich aus dem Netz runterlade hat etwa folgendes Format:

Code: Alles auswählen

altes  Format(ursprüngliches .m3u-Format	      Umwandlungsformat

#EXTINF:-1,DE-NICK_JR				                -> #DESCRIPTION NICK_JR		   
http://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts    -> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts:NICK_JR
#EXTINF:-1,DE-Disney_Channel_HD                        -> #DESCRIPTION Disney_Channel_HD
http://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts    -> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts:Disney Channel_HD
#EXTINF:-1,DE-Disney_XD				        -> #DESCRIPTION Disney_XD
http://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts    -> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts:Disney_XD
#EXTINF:-1,DE-Disney_Junior                                  -> #DESCRIPTION Disney_Junior
http://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts     ->#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts:Disney_Junior
#EXTINF:-1,DE-Kika_HD                                          -> #DESCRIPTION Kika_HD
http://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts      -> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts:Kika_HD
#EXTINF:-1,DE-Disney_Cinemagic			        -> #DESCRIPTION Disney_Cinemagic
http://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts      -> #SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts:Disney_Cinemagic
Wie gesagt;die letzten Tage saß ich zuviel vorm PC und konnte meine Gedanken nicht so richtig sammeln.
Die daten auf der linken Seite varieren sich manchmal an [],(),[AVCSF], usw. nach #EXTINF:-1,-Zeilen, aber da reicht mir nur der Sendername wie auf der rechten Seite beschrieben.
Ich hoffe, dass ich diesmal mein Problemchen besser darstellen konnte.
Ich bin wirklich nach so vielen Experimentiertagen über viele Stunden ziemlich angeschlagen.

Die Darstellung im Codefenster ist mir nicht besonders gelungen, aber die URL's auf der rechten Seite sollten auf die rechte Seite und nicht runter auf der linken Seite weitergeführt werden.
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von FragDenPinguin » 10.01.2017 01:41:06

Ich versuche es auch noch einmal, wenn es gestattet ist, weil ich diese Anwendung von sed schon recht spannend finde:

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /'
ersetzt #ENTINF:-1,DE- durch #DESCRIPTION. Das reicht schon, um die erste gewünschte Zeile zu fabrizieren - also gebe ich das Ganze aus:

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /;p'
Nun will ich den Sendernamen alleine abspeichern, also lösche ich #DESCRIPTION nach der erfolgreichen Ausgabe der Zeile wieder und vertausche (x) den 'hold space' und den 'pattern space'. Der 'hold space' ist quasi die Zwischenablage, in die auch mit 'h' Zeilen zwischengespeichert werden können. Dann habe ich also den Sendernamen im 'hold space'. (Der 'pattern space' ist die Zeile, die letztendlich mit dem print-Kommando (p) ausgegeben wird). Danach gehts weiter zur nächsten Zeile (n).

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /;p;s/#DESCRIPTION//;x;n'
In dieser Zeile angekommen ersetze ich nun "http://" durch "#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://":

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /;p;s/#DESCRIPTION//;x;n;s/http\:\/\//#SERVICE 4097\:0\:1\:0\:0\:0\:0\:0\:0\:0\:http%3a\:\/\//'
Nun muss noch der Doppelpunkt ans Zeilenende - dazu ersetze (s) ich das Zeilenende ("$") durch ":".
Schlussendlich hole ich den Sendernamen wieder aus dem Holdspace und gebe das Ganze aus - sollte fertig sein.

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /;p;s/#DESCRIPTION//;x;n;s/http\:\/\//#SERVICE 4097\:0\:1\:0\:0\:0\:0\:0\:0\:0\:http%3a\:\/\//;s/$/:/;G;p'
Auf die Daten angewendet ergibt sich:

Code: Alles auswählen

 #DESCRIPTION NICK_JR         
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts:
 NICK_JR         
#DESCRIPTION Disney_Channel_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts:
 Disney_Channel_HD
#DESCRIPTION Disney_XD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts:
 Disney_XD
#DESCRIPTION Disney_Junior
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts:
 Disney_Junior
#DESCRIPTION Kika_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts:
 Kika_HD
#DESCRIPTION Disney_Cinemagic
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts:
 Disney_Cinemagic
Doch noch nicht so ganz ... Was ist falsch gelaufen?

Anscheinend habe ich das Leerzeichen vor dem Sendernamen stehenlassen (schnell gefixt) und da ist noch ein Newline drin. Also vielleicht doch lieber erst den Sendernamen aus dem Holdspace anhängen und dann das Newline durch den Doppelpunkt ersetzen, wie von Meillo vorgeschlagen:

Code: Alles auswählen

sed -n 's/#EXTINF:-1,DE-/#DESCRIPTION /;p;s/#DESCRIPTION //;x;n;s/http\:\/\//#SERVICE 4097\:0\:1\:0\:0\:0\:0\:0\:0\:0\:http%3a\:\/\//;G;s/\n/\:/;p'

Code: Alles auswählen

#DESCRIPTION NICK_JR         
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts:NICK_JR         
#DESCRIPTION Disney_Channel_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts:Disney_Channel_HD
#DESCRIPTION Disney_XD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts:Disney_XD
#DESCRIPTION Disney_Junior
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts:Disney_Junior
#DESCRIPTION Kika_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts:Kika_HD
#DESCRIPTION Disney_Cinemagic
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts:Disney_Cinemagic
Vielleicht solltest du noch spezifischer angeben, was außer dem Sendernamen im jetzigen Zustand des Projekts noch alles in der #EXTINF-Zeile auftauchen kann, ([], [AGGDS] usw.) und wo da der Sendernamen steht, damit die Lösung auch solche Fälle erschlägt.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 10.01.2017 07:06:31

tHoRax hat geschrieben: Die ursprüngliche Datei(*m3u), welche ich aus dem Netz runterlade hat etwa folgendes Format:
[...]

Die Darstellung im Codefenster ist mir nicht besonders gelungen, aber die URL's auf der rechten Seite sollten auf die rechte Seite und nicht runter auf der linken Seite weitergeführt werden.
Bitte kein solcher Mischmasch, sondern einmal die Ausgangsdaten wie sie sind und einmal die Zieldaten wie sie sein sollen, jeweils separat. Denn dann kann ich die Ausgangsdaten in eine Datei kopieren und die Zieldaten in eine andere, und dann an einem Script arbeiten, das mit den Ausgangsdaten ein Ergebnis erzeugt, das ich automatisiert mit diff(1) gegen die Zieldaten abgleichen kann. Das ist die mit Abstand sinnvollste Herangehensweise und hat sich zigfach bewaehrt.
Use ed once in a while!

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von tHoRax » 10.01.2017 10:23:59

@FragDenPinguin
So wie du erläutert hast, sollte es in der Zieldatei zum Schluss aussehen,nur die Zeilen verdreht. :)
Ich probier's aber später,danke :THX:

Code: Alles auswählen

Bitte kein solcher Mischmasch...
Sorry meillo,eigentlich wollte ich es verständlicher gestalten,aber es kam nicht so an, wie ich es im Text formatiert hatte.
Ich versuche es mal so,ohne dass ich ein Codefenster aufsetze, welches mir so ein Mischmasch erzeugt.

Ausgangsformat:

Code: Alles auswählen

#EXTINF:-1,DE-NICK_JR                                                    
http://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts    
#EXTINF:-1,DE-Disney_Channel_HD                        
http://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts    
#EXTINF:-1,DE-Disney_XD                                      
http://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts    
#EXTINF:-1,DE-Disney_Junior                                  
http://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts     
#EXTINF:-1,DE-Kika_HD                                          
http://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts      
#EXTINF:-1,DE-Disney_Cinemagic                          
http://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts      
Umwandlungsformat:

Code: Alles auswählen

#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/1234.ts:NICK_JR
#DESCRIPTION NICK_JR 
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2343.ts:Disney Channel_HD
#DESCRIPTION Disney_Channel_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/2341.ts:Disney_XD
#DESCRIPTION Disney_XD                             
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/3244.ts:Disney_Junior
#DESCRIPTION Disney_Junior                           
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/962.ts:Kika_HD
#DESCRIPTION Kika_HD
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a://iptv.abcde.df:8000/live/Znvc/Znvc/976.ts:Disney_Cinemagic
#DESCRIPTION Disney_Cinemagic
Hoffe, das hilft dir und mir weiter... :)

Aber @Pinguin hat den Ansatz verstanden. :wink:
Zuletzt geändert von Meillo am 10.01.2017 10:55:21, insgesamt 1-mal geändert.
Grund: code-Tags eingefuegt ;-)
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 10.01.2017 11:00:27

tHoRax hat geschrieben:

Code: Alles auswählen

Bitte kein solcher Mischmasch...
Sorry meillo,eigentlich wollte ich es verständlicher gestalten,aber es kam nicht so an, wie ich es im Text formatiert hatte.
Ich versuche es mal so,ohne dass ich ein Codefenster aufsetze, welches mir so ein Mischmasch erzeugt.
Ich hab mir erlaubt die code-Tags zu ergaenzen ... wichtig war mir, dass Quelldaten und Zieldaten klar getrennt sind. (Der Whitespace am Zeilenende ist irrelevant, vermute ich.)

Noch eine Nachfrage: In deinen Zieldaten kommt #SERVICE vor #DESCRIPTION, ich dachte das soll andersrum sein.

Aber sonst ist das eine Basis auf er man arbeiten kann. :-)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Sed-Einzeiler zur Bearbeitung von Streamdatei

Beitrag von Meillo » 10.01.2017 11:08:09

Wenn die #DESCRIPTION vor #SERVICE kommen soll und wenn der eine abweichende Unterstrich ein Versehen war, dann sollte dir dieser Befehl die Umwandlung machen:

Code: Alles auswählen

sed 's/^#EXTINF:-1,DE-//; h; s/^/#DESCRIPTION /; n; s/^http/#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a/; G; s/\n/:/'
Falls die #DESCRIPTION und #SERVICE doch anders rum sein sollen, kannst du ja einfach noch durch das bekannte

Code: Alles auswählen

sed -n 'h;n;G;p'
pipen.
Use ed once in a while!

Antworten