저는 Raspberry Pi(raspbian 실행)를 사용하고 있으며 다음을 통해 값을 텍스트 파일로 계속 출력하는 쉘 스크립트가 있습니다.
wavemon -d |grep -i signal >> textfile.txt
출력은 다음과 같습니다.
signal level: 20 dBm (100.00mW)
질문: 다른 단어를 제거하는 방법(신호 레벨: dBm(100.00mW))를 입력한 다음 텍스트 파일에 숫자(20)만 표시되도록 텍스트 파일에 숫자를 입력합니까?
답변1
그리고 grep
:
wavemon -d | grep -oP 'signal level: \K[0-9]+'
-o
일치하는 부분만 인쇄-P
Perl 호환 정규식 PCRE 활성화(\K
)signal level: \K[0-9]+
패턴을 검색signal level:
하면 \K는 일치 항목의 시작 부분을 현재 위치로 재설정하고[0-9]+
하나 이상의 숫자와 일치합니다.
답변2
cut
다음과 같이 프로그램을 사용할 수 있습니다 .
cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2
작동 방식은 다음과 같습니다.
signal level: 20 dBm (100.00mW)
먼저 옵션을 사용하여 구분 기호 "콜론"으로 텍스트를 분할한 -d':'
다음 옵션을 사용하여 두 번째 필드를 가져옵니다 -f2
.
그런 다음 결과를 구분 기호 "공백"으로 분할 20 dBm (100.00mW)
하고 두 번째 필드를 다시 가져옵니다.
답변3
awk
이러한 필드가 모두 신뢰할 수 있다고 가정하면 다음을 사용할 수 있습니다.
wavemon -d | awk -v IGNORECASE=1 '$1 ~ /signal/ {print $3}' >> textfile.txt
또는 파일이 이미 생성되었기 때문에 필터링만 하려는 경우
cut -f3 -d " " textfile.txt
답변4
Raspberry Pi를 사용하고 있으므로 Python 방식으로 수행할 수 있습니다.
import re
w=open("newfile.txt",'w')
with open('textfile.txt') as f:
a=re.findall(r'\d+',f.readline())
w.write(a[0])