Saída do terminal Linux para arquivo, mas como filtrada?

0

Tópico semelhante: Continuamente escrevendo saída de terminal para arquivo de texto

Eu tenho um receptor RF usb no mate do Ubuntu, o que me dá este tipo de dados para o terminal:

b';311;'

b';312;'

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

b';313;'

Posso salvar apenas o mais longo? De preferência, sem "b '; xxx", mas também posso analisá-lo mais tarde.

    
por Thomashamka 06.11.2015 / 02:57

2 respostas

1

Você precisará enviar seus dados de RF para um programa que possa fazer a filtragem em um arquivo

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

filter.pl faz, você adivinhou, filtrando:

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

A expressão regular corresponde ao seu formato e extrai os caracteres entre os dois últimos ponto e vírgula.

    
por 06.11.2015 / 03:22
0

Em sed , com regex básica:

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

Em sed , com regex estendido:

whatever | sed -n "s/^b';[0-9]{3};(.+);'//p" >> output_file
    
por 06.11.2015 / 05:08