macOS bash スクリプト正規表現が期待どおりに動作しません。

macOS bash スクリプト正規表現が期待どおりに動作しません。

私は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つの問題があります。

  1. 思ったように正規表現を使用していません($および欠落regex2regex3
  2. bashPerlのような正規表現は、\W「単語ではない」という意味では理解されません。
  3. 変数が呼び出されたにもかかわらず行を読みませんline

この問題を解決するには:

  1. $テストから合計値を取得するには、onを使用します。regex2regex3

    if [[ $line =~ $regex2 ]]; then ...; fi
    
  2. [^[:alnum:]_]の代わりにPOSIX正規表現を使用するか、タブまたはスペースを一致させます。\W[[:blank:]]

  3. 使用while IFS= read -r line; do ...; done( '「IFS=read-r-line」を理解する")。

おすすめ記事