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

정규식과 변수가 너무 많습니다.

두 가지 값을 얻으십시오.

$ 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

관련 정보