类似主题:连续将终端输出写入文本文件
我在 ubuntu mate 上有一个 USB RF 接收器,它可以向终端提供此类数据:
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