![过滤掉文本文件的输入](https://linux22.com/image/80917/%E8%BF%87%E6%BB%A4%E6%8E%89%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E8%BE%93%E5%85%A5.png)
我正在使用 Raspberry Pi(运行 raspbian),并且我有一个 shellscript 通过以下命令不断将值输出到文本文件中:
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)
首先使用 option 在分隔符“冒号”上分割文本-d':'
,然后使用 option 获取第二个字段-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
既然你在树莓派上,你可以用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])