2017-02-10 6 views
0

Ich lese Daten vom Eingang/dev/ttyUSB0 mit Hilfe von cat. das ist ein Strom von Text, der für immer weitergeht.Verwenden von sed, um einen Stream von tty zu analysieren

Die Daten sehen so aus, dass jede Zeile mit 002 beginnt und mit 003 endet (stx und etx). So sieht der Text wie folgt aus:

/002{"xxxx": 12, "yyyy": "sendRegistration", "zzzz": 1}/003/002{"xxxx": 13, "yyyy": "keepAlive", "zzzz": 1}/003..... 

Ich möchte sed verwenden, um die Linien zu so etwas zu ändern:

/002{"xxxx": 12, "yyyy": "sendRegistration", "zzzz": 1} 
/002{"xxxx": 13, "yyyy": "keepAlive", "zzzz": 1} 

Wo ich das/003 mit einem Newline ersetzen.

Aber wenn ich sed Aussage wie solche verwenden bekomme ich keine Ausgabe:

cat /dev/ttyUSB0 | sed -e 's/\003/\n/g' 
+0

vielleicht sollten Sie verwenden, "stty -a -F" anstelle von "cat"? – NinjaGaiden

+0

Sie benötigen einen umgekehrten Schrägstrich in Ihrem sed-Befehl: 'sed 's/\/003/\ n/g'' – oliv

+0

Für mich funktioniert' sed "s/\ x03/\ n/g;" ' –

Antwort

0

Sed verarbeitet Line-Eingang für Zeile . Es verarbeitet eine Zeile, wenn sie diese Zeile empfängt. Und (ungeachtet des Gebietsschemas) ist mir keine Möglichkeit bekannt, sed zu befehlen, etwas anderes als eine neue Zeile zu verwenden, um die Trennung von Linien zu bezeichnen.

Meine Lösung wäre, zu einem anderen Tool zu wechseln, das die Möglichkeit unterstützt, einen alternativen Datensatztrenner zu verwenden. awk scheint die Rechnung zu passen.

$ awk 'BEGIN{RS="\x03"} {print "> ",$0}' <<<$'one\003two\003three\003' 
> one 
> two 
> three 

So würde ich denken, dass eine Lösung zu bekommen, was Sie vielleicht wollen:

$ awk 'BEGIN{RS="\x03"} 1' < /dev/ttyUSB0 
+0

Brilliant! Das hat funktioniert. – user846566

+0

Super! Froh, dass ich helfen konnte! Bitte klicken Sie auf das Häkchen auf der linken Seite meiner Antwort. – ghoti

0

Scheint, wie die Syntax falsch ist.
Sie verwenden \ 003, Backslash wird verwendet, um Sonderzeichen anzuzeigen.
Versuchen \/003

Ihr sed Befehl wie so aussehen sollte: möchte
sed 's/\/003/\n/g'
Wenn Sie Sie \ als seperator ersetzen kann, um Verwirrung zu vermeiden:
sed '[email protected]\/[email protected]\[email protected]'

+0

Sie haben Recht mit sed. Aber das ist nicht der Grund, warum ich keine Ausgabe bekomme, denn wenn ich die Zeile zu sed 's/keepAlive/XXXX/g' ändere, bekomme ich immer noch keine Ausgabe an die Konsole. – user846566

Verwandte Themen