Linux-Terminalausgabe in Datei, aber gefiltert?

Linux-Terminalausgabe in Datei, aber gefiltert?

Ähnliches Thema:Kontinuierliches Schreiben der Terminalausgabe in eine Textdatei

Ich habe einen USB-RF-Empfänger auf Ubuntu Mate, der mir diese Art von Daten an das Terminal überträgt:

b';311;'

b';312;'

b';312;00000000;036;552;1014f49;3020;2659;6294;1049;2659;S;'

b';313;'

Kann ich nur das längste speichern? Am besten ohne „b';xxx“, aber ich kann es auch später analysieren.

Antwort1

Sie müssen Ihre RF-Daten in ein Programm weiterleiten, das die Filterung durchführen kann, und dann in eine Datei

cat | ./filter.pl < /dev/ttyusb0 >> output.file

filter.plführt die, Sie haben es erraten, Filterung durch:

#!/usr/bin/env perl 

# disable buffering    
$|=1;

$re = qr/
  ^         # Match start of line
  b';       # b quote semi colon
  \d+       # Match one or more digits
  ;         # semi colon
  (.+)      # One or more characters, store the match as $1
  ;'        # semi colon, single quote
/x;

while (<>) {
  print "$1\n" if $_ =~ $re
}

Der reguläre Ausdruck entspricht Ihrem Format und extrahiert die Zeichen zwischen den letzten beiden Semikolons.

Antwort2

In sedmit einfachem regulären Ausdruck:

whatever | sed -n "s/^b';[0-9]\{3\}];\(.\+\);'/\1/p" >> output_file

In sedmit erweitertem regulären Ausdruck:

whatever | sed -n "s/^b';[0-9]{3};(.+);'/\1/p" >> output_file

verwandte Informationen