
Похожая тема:Непрерывная запись вывода терминала в текстовый файл
У меня есть USB-приемник RF на Ubuntu Mate, который передает мне на терминал следующие данные:
b';311;'
b';312;'
b';312;00000000;036;552;1014f49;3020;2659;6294;1049;2659;S;'
b';313;'
Могу ли я сохранить только самый длинный? Желательно без "b';xxx", но я смогу разобрать его и позже.
решение1
Вам нужно будет передать ваши радиочастотные данные в программу, которая может выполнить фильтрацию, а затем в файл.
cat | ./filter.pl < /dev/ttyusb0 >> output.file
filter.pl
выполняет, как вы уже догадались, фильтрацию:
#!/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
}
Регулярное выражение соответствует вашему формату и извлекает символы между двумя последними точками с запятой.
решение2
В sed
, с базовым регулярным выражением:
whatever | sed -n "s/^b';[0-9]\{3\}];\(.\+\);'/\1/p" >> output_file
В sed
, с расширенным регулярным выражением:
whatever | sed -n "s/^b';[0-9]{3};(.+);'/\1/p" >> output_file