Salida del terminal de Linux al archivo, pero ¿como se filtra?

Salida del terminal de Linux al archivo, pero ¿como se filtra?

Tema similar:Escribiendo continuamente la salida del terminal en un archivo de texto

Tengo un receptor RF USB en Ubuntu Mate, que me da este tipo de datos al terminal:

b';311;'

b';312;'

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

b';313;'

¿Puedo guardar sólo el más largo? Preferiblemente sin "b';xxx", pero también puedo analizarlo más tarde.

Respuesta1

Necesitará canalizar sus datos de RF a un programa que pueda realizar el filtrado y luego a un archivo.

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

filter.plhace, lo has adivinado, filtrar:

#!/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
}

La expresión regular coincide con su formato y extrae los caracteres entre los dos últimos puntos y coma.

Respuesta2

En sed, con expresiones regulares básicas:

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

En sed, con expresiones regulares extendidas:

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

información relacionada