staging.inyokaproject.org

sed-Befehl ändert Ausdruck "falsch" ab

Status: Gelöst | Ubuntu-Version: Server 22.04 (Jammy Jellyfish)
Antworten |

Wolfmann

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

Guten Abend,

ich wollte aus einem Stream (Format: http://ip-adresse) in einen stream umwandeln, der als pipe mitffmpeg arbeitet (Zwecks Formatumwandlung). Allgemein sähe das Format dann so aus: pipe:///usr/bin/ffmpeg -i http://ip-adresse -c copy -f mpegts pipe:1

Heißt also alle umzuwandelnden Zeilen fangen mit http an. Ich wollte das daher mit sed erledigen und vor das http den Teil pipe:///usr/bin/ffmpeg -i setzen und hintendran das -c copy usw.

Habe daher folgenden Befehl verwendet:

1
sed -E 's|^(http.*)|pipe:///usr/bin/ffmpeg -i \1 -c copy -f mpegts pipe:1|' deine_datei.txt

Problem dabei war, dass der Teil, der hinter der Stream-URL stehen sollte, davor stand und der Teil, der eigentlich vor der URL stehen soll, gar nicht erst auftaucht. Hoffe, ich habe mich nicht zu kompliziert ausgedrückt. Aber weiß jemand, wo mein Denkfehler liegt?

BesteGrüße

TK87

Anmeldungsdatum:
8. Juli 2019

Beiträge: 266

Moin,

könnte mit der URL-Kodierung zusammenhängen, wie genau sieht deine Textdatei aus?

Der Befehl funktioniert hier zwar, aber sed ist da vermutlich ohnehin nicht die beste Wahl.

Versuche mal folgendes:

1
printf 'pipe:///usr/bin/ffmpeg -i %s -c copy -f mpegts pipe:1\n' $(grep -oE "^http\S+" deine_datei.txt)

Gruß Thomas

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Hoffe, ich habe mich nicht zu kompliziert ausgedrückt.

Äh... Für mich glaube ich, ja.

Ich vermute, du meinst folgendes:

$ echo "http://ip-adresse" | sed 's#.*#pipe:///usr/bin/ffmpeg -i & -c copy -f mpegts pipe:1#'
pipe:///usr/bin/ffmpeg -i http://ip-adresse -c copy -f mpegts pipe:1
$ 

Oder denke ich zu einfach?

Wolfmann

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

shiro schrieb:

Hoffe, ich habe mich nicht zu kompliziert ausgedrückt.

Äh... Für mich glaube ich, ja.

Ich vermute, du meinst folgendes:

$ echo "http://ip-adresse" | sed 's#.*#pipe:///usr/bin/ffmpeg -i & -c copy -f mpegts pipe:1#'
pipe:///usr/bin/ffmpeg -i http://ip-adresse -c copy -f mpegts pipe:1
$ 

Oder denke ich zu einfach?

Nein du denkst nicht zu einfach - genau so soll es aussehen. Und mit dem Befehl klappt das auch. Aber ich müsste halt durch eine Datei durchscannen. Der Befehl von Thomas funktioniert gut - damit wird alles richtig ausgegeben - allerdings sind dann die Zeilen ohne die Stream-URL weg, da hier wirklich nur die betreffenden Zeilen ausgegeben werden.

Deshalb dachte ich auch, dass sed ganz gut geeignet wäre

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 5329

Bitte unterlasse Fullquotes. Sie blähen den Thread nur sinnlos auf.

Lies dazu Zitate.

Da steht eindeutig:

Hier wird ausdrücklich von "Teile eines vorherigen Beitrags" gesprochen, gesamte -also komplette- Beitragen zu zitieren ist unerwünscht.

Und wenn man direkt antwortet reicht ein @[user:Benutzername:] da braucht es garkein Zitat.

Wolfmann

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

Ok, sorry.

Habe den Fehler jetzt gefunden! Musste dieDatei mit dos2unix noch umwandeln. Jetzt klappt auch der ursprüngliche Befehl!

Antworten |