Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Yadgar
- Beiträge: 983
- Registriert: 22.11.2010 22:11:08
- Wohnort: Qal'a-ye Nil, Bergisch-Afghanistan (linksrheinische Exklave)
-
Kontaktdaten:
Beitrag
von Yadgar » 11.10.2018 15:51:08
Hi(gh)!
Folgendes Problem: damit Amarok bei einer m3u-Playlist korrekte Gesamtspieldauern anzeigt, muss die Dauer jedes Einzeltitels nach #EXTINF in Millisekunden angegeben werden. Die Playlist-Exportfunktion von Amarok verwendet nur Sekunden, so dass jeweils drei Nullen angefügt werden müssen. Aus
Code: Alles auswählen
#EXTINF:296,Baumann - Strangers In The Night, Long Version
müsste also werden:
Code: Alles auswählen
#EXTINF:296000,Baumann - Strangers In The Night, Long Version
Wenn ich allerdings das sed-Kommando
verwende, wird nicht die ursprüngliche Einer-Sekundenzahl beibehalten, sondern durch [0-9] ersetzt. Wie mache ich sed klar, dass die Zahl übernommen werden soll?
Bis bald im Khyberspace!
Yadgar
If operating systems were countries, Linux would be pre-1978 Afghanistan: an all-time favourite among alternative globetrotters, but shunned by mainstream tourists because of its lack of fancy beaches, shortage of alcoholic beverages and its fondness of beards...
-
Meillo
- Moderator
- Beiträge: 9227
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.10.2018 16:03:07
Use ed once in a while!
-
Yadgar
- Beiträge: 983
- Registriert: 22.11.2010 22:11:08
- Wohnort: Qal'a-ye Nil, Bergisch-Afghanistan (linksrheinische Exklave)
-
Kontaktdaten:
Beitrag
von Yadgar » 11.10.2018 16:21:06
Hi(gh)!
Meillo hat geschrieben: 11.10.2018 16:03:07
Was bedeutet '\1' im "Ersetzen"-Teil des s-Kommandos?
(etwas später)
Ah, ich habe es schon herausgefunden: Referenz auf regulären Ausdruck! Müssen reguläre Ausdrücke in sed eigentlich immer geklammert werden?
Meillo hat geschrieben: 11.10.2018 16:03:07
Es ginge aber auch:
Keine gute Idee, denn in den Playlists kommt das Komma auch mal hinter Buchstaben vor!
Bis bald im Khyberspace!
Yadgar
If operating systems were countries, Linux would be pre-1978 Afghanistan: an all-time favourite among alternative globetrotters, but shunned by mainstream tourists because of its lack of fancy beaches, shortage of alcoholic beverages and its fondness of beards...
-
Meillo
- Moderator
- Beiträge: 9227
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.10.2018 16:46:11
Yadgar hat geschrieben: 11.10.2018 16:21:06
Meillo hat geschrieben: 11.10.2018 16:03:07
Es ginge aber auch:
Keine gute Idee, denn in den Playlists kommt das Komma auch mal hinter Buchstaben vor!
Doch, das ist ist eine gute Idee!
Use ed once in a while!
-
hikaru
- Moderator
- Beiträge: 13900
- Registriert: 09.04.2008 12:48:59
Beitrag
von hikaru » 11.10.2018 16:47:26
Yadgar hat geschrieben: 11.10.2018 16:21:06
Müssen reguläre Ausdrücke in sed eigentlich immer geklammert werden?
Nein. sed arbeitet grundsätzlich auf Regex.
Yadgar hat geschrieben: 11.10.2018 16:21:06
Keine gute Idee, denn in den Playlists kommt das Komma auch mal hinter Buchstaben vor!
Und Zahlen! Daher ist es wichtig, dass du hier das sed-Kommando nicht mit
g abschließen (wie in deinem Eingangsbeitrag), sonst zerwürgt dir das möglicherweise die Titel. Beispiel: "Megadeath - 1,320"
Du willst hier wirklich nur das erste Auftreten einen Kommas berücksichtigen, denn das ist in einer m3u das hinter der Länge.
-
Yadgar
- Beiträge: 983
- Registriert: 22.11.2010 22:11:08
- Wohnort: Qal'a-ye Nil, Bergisch-Afghanistan (linksrheinische Exklave)
-
Kontaktdaten:
Beitrag
von Yadgar » 11.10.2018 17:20:34
Hi(gh)!
Das Skript (zusammen mit weiteren sed-Kommandos) hat exakt einmal funktioniert, beim zweiten Mal bekomme ich wieder Fehlermeldungen, die ich nicht verstehe...
Hier das Skript:
Code: Alles auswählen
sed -i -e 's/%20/ /g' *m3u
sed -i -e 's/%27/\'/g' *m3u
sed -i -e 's/%28/\(/g' *m3u
sed -i -e 's/%29/\)/g' *m3u
sed -i -e 's/%2C/,/g' *m3u
sed -i -e 's/\([0-9]\),/\1000,/' *m3u
und die dazu gehörige Fehlermeldung:
Code: Alles auswählen
/home/yadgar/scripts/m3u: Zeile 6: Dateiende beim Suchen nach `'' erreicht.
/home/yadgar/scripts/m3u: Zeile 7: Syntax Fehler: Unerwartetes Dateiende.
Was soll das?!? Ist das ' in der zweiten Zeile falsch maskiert?
(fünf Minuten später)
Nein, ist es nicht, aber selbst mit einem maskierten ' müssen die Hochkommata am Anfang und Ende der s-Sequenz durch " ersetzt werden:
Bis bald im Khyberspace!
Yadgar
If operating systems were countries, Linux would be pre-1978 Afghanistan: an all-time favourite among alternative globetrotters, but shunned by mainstream tourists because of its lack of fancy beaches, shortage of alcoholic beverages and its fondness of beards...
-
Yadgar
- Beiträge: 983
- Registriert: 22.11.2010 22:11:08
- Wohnort: Qal'a-ye Nil, Bergisch-Afghanistan (linksrheinische Exklave)
-
Kontaktdaten:
Beitrag
von Yadgar » 11.10.2018 18:20:09
Hi(gh)!
Und Zahlen! Daher ist es wichtig, dass du hier das sed-Kommando nicht mit g abschließen (wie in deinem Eingangsbeitrag), sonst zerwürgt dir das möglicherweise die Titel. Beispiel: "Megadeath - 1,320"
Du willst hier wirklich nur das erste Auftreten einen Kommas berücksichtigen, denn das ist in einer m3u das hinter der Länge.
Abgesehen davon, dass die Truppe "Megadeth" (ohne zweites a) heißt (wo ist hier eigentlich der Headbanger-mit-Pommesgabel-Smily?)... du meinst sicherlich "erstes Auftreten pro Zeile", oder?
Bis bald im Khyberspace!
Yadgar
If operating systems were countries, Linux would be pre-1978 Afghanistan: an all-time favourite among alternative globetrotters, but shunned by mainstream tourists because of its lack of fancy beaches, shortage of alcoholic beverages and its fondness of beards...
-
Meillo
- Moderator
- Beiträge: 9227
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.10.2018 19:16:33
Nachtrag: Dies waere meine praeferierte Loesung:
Zu deinem anderen Problem: Innerhalb von Singlequotes sind Backslashes keine Escape-Zeichen, darum kann man innerhalb von Singlequote-Strings keine Singlequotes aufnehmen. So nimmt man ein Singlequote in einen Singlequote-String auf:
Oder so:
Use ed once in a while!