私は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]+
1つ以上の数字と一致します。
答え2
cut
次のようにプログラムを使用できます。
cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2
仕組みは次のとおりです。
signal level: 20 dBm (100.00mW)
まず、オプションを使用して区切り文字「コロン」にテキストを分割し、オプションを使用-d':'
して2番目のフィールドを取得します-f2
。
次に、結果を区切り文字「スペース」に分割し、20 dBm (100.00mW)
2番目のフィールドを再取得します。
答え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])