私は10年以上プログラミングをしていません。テキストファイルがあり、アップロードとダウンロード速度のMpbs値を読み取ろうとしています。
Server: Iomart - Maidenhead (id = 3839)
ISP: Plusnet
Latency: 8.59 ms (0.10 ms jitter)
Download: 71.43 Mbps (data used: 52.8 MB)
Upload: 18.39 Mbps (data used: 16.9 MB)
Packet Loss: 0.0%
私は正規表現ツールを使って正規表現をテストして構築してきました。
regex2="Upload:\W+([0-9]+\.[0-9]+)"
regex3="Download:\W+([0-9]+\.[0-9]+)"
while read line; do
if [[ $line =~ regex2 ]]
then
echo "match ${BASH_REMATCH[1]}"
UPS=${BASH_REMATCH[1]}
fi
if [[ $line =~ regex3 ]]
then
echo "match ${BASH_REMATCH[1]}"
DNS=${BASH_REMATCH[1]}
fi
done < Result.txt
私が望むことを達成するより良い方法があると確信していますが、私が経験している主な問題は正規表現が機能しないことです。
ベストアンサー1
コードには3つの問題があります。
- 思ったように正規表現を使用していません(
$
および欠落regex2
)regex3
。 bash
Perlのような正規表現は、\W
「単語ではない」という意味では理解されません。- 変数が呼び出されたにもかかわらず行を読みません
line
。
この問題を解決するには:
$
テストから合計値を取得するには、onを使用します。regex2
regex3
if [[ $line =~ $regex2 ]]; then ...; fi
式
[^[:alnum:]_]
の代わりにPOSIX正規表現を使用するか、タブまたはスペースを一致させます。\W
[[:blank:]]
使用
while IFS= read -r line; do ...; done
( '「IFS=read-r-line」を理解する")。