sed/grep がランダムに文字列を切り捨てない

sed/grep がランダムに文字列を切り捨てない

テキストファイルからコンテンツをロードし、それに応じてデータを抽出するbashスクリプトを使用しています。問題は、抽出されたデータの前に点が表示されることがあることです。

パスワード:

function str_extract() {
 pattern=$1
 # Extract
 res=`grep "$pattern" $log | sed "s/$pattern//g"`
 # Drop trailing ...
 res=`echo $res | sed 's/[.][.][.]//g'`
 # Trim
 res=`echo $res | sed 's/^ *//g' | sed 's/ *$//g'`
 echo  $res
}

  download=`str_extract "Download: "`
  upload=`str_extract "Upload: "`

データ:

Retrieving speedtest.net configuration...
Testing from Telecomunicazioni S.p.A. ...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Coolnetwork (Arezzo) [26.09 km]: 111.547 ms
Testing download speed................................................................................
Download: 2.06 Mbit/s
Testing upload speed...............................................................................................
.Upload: 1.81 Mbit/s
Share results

抽出する

"2.06" #correct 
".1.81" #wrong preceding dot

答え1

正規表現と変数が多すぎます。

2つの値を取得します。

$ sed -n 's/^\.*\(Download\|Upload\): //p' data
2.06 Mbit/s
1.81 Mbit/s

値を取得します。

$ sed -n 's/^\.*Upload: //p' data
1.81 Mbit/s

「Mbit/s」なしで値を取得します。

$ sed -n 's/^\.*Upload: \([0-9.]*\).*/\1/p' data
1.81
  • ^\.*前のポイントを削除(数字は関係ありません)
  • \([0-9.]*\)交換用キャプチャグループ\1

関連情報