socat gibt Daten mit \r\n
Zeilenenden zurück. Veränderung
s/$/)/
zu
s/\r$/)/
Das kann mit dem OSX sed funktionieren oder auch nicht
Ich habe einen Server, der Daten in einem UDP-Broadcast an Port 10552 sendet. Die Daten bestehen aus 7 Zahlen, die durch Kommas getrennt sind.
5.351204,0.001968,-0.000473,-0.999222,0.000451,0.001455,1.084310
Ich hole diese Daten mit ab
socat -u udp-recv:10552,reuseaddr -
Ich möchte das Format dieser Daten ändern, also leite ich es in sed. Die erste Nummer ist mir egal, also entferne ich sie mit
s/[^,]*,//;
Ich füge nach den Kommas Leerzeichen mit ein
s/,/, /g
Dann füge ich am Anfang jeder Zeile eine offene Klammer mit ein
s/^/(/
Zum Schluss versuche ich, am Ende jeder Zeile eine enge Klammer hinzuzufügen
s/$/)/
Der letzte Befehl endet
socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/'
Alles funktioniert wie erwartet, nur die letzte schließende Klammer endet am Anfang jeder Zeile, so dass es aussieht
)0.051727, -0.595779, -0.794678, 0.082047, 0.644327, -0.027242
Entfernen des letzten Bits des Befehls für
socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;'
führt in
(0.079330, -0.608597, -0.786194, 0.092438, 0.657444, -0.031528
Ich habe versucht, das Ende der Zeile durch awk, tr und auch GNU sed zu ersetzen, aber alles scheint die Zeile oder etwas zu überlaufen.
Ich bin auf OS X 10.10.3 mit der eingebauten Bash 3.2. Kann ich noch etwas probieren?
socat gibt Daten mit \r\n
Zeilenenden zurück. Veränderung
s/$/)/
zu
s/\r$/)/
Das kann mit dem OSX sed funktionieren oder auch nicht
Eine Alternative zum expliziten Entfernen der CR ist, socat
dass die Zeilen mit CR NL terminiert sind:
socat -u udp-recv:10552,reuseaddr,crnl - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/'