Linux 터미널이 파일로 출력되지만 필터링됩니까?

Linux 터미널이 파일로 출력되지만 필터링됩니까?

비슷한 주제:터미널 출력을 텍스트 파일에 지속적으로 쓰기

이런 종류의 데이터를 터미널에 제공할 수 있는 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

RF 데이터를 필터링할 수 있는 프로그램으로 전송한 다음 파일로 전송해야 합니다.

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

관련 정보