결과

결과

나는 다음 줄을 가지고 있습니다

scalar TestDmaMac4.sink.udpApp[0]   throughput:last     11730.559888477

이 줄에서만 추출하고 싶은데 11730어떻게 해야 합니까 grep? 소수점 뒤의 숫자는 무시하고 소수점 앞의 숫자만 필요로 합니다.

(참고:{space}{tab}를 각각 분리하는 순서 udpApp[0]throughput:last로 시작하는 숫자 11730.)

답변1

다음 정규 표현식은 형식의 모든 부동 숫자와 일치하며 [0-9].[0-9]이 부동 숫자의 정수 부분을 반환합니다.

$ a="scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477"
$ egrep -o '[0-9]+[.][0-9]' <<<"$a" |egrep -o '[0-9]+[^.]'  #First grep will isolate the floating number , second grep will isolate the int part.
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #using the lazy operator ?
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$a"  #sed does not have lazy operator thus we simulate this with negation
11730

테스트를 위해 선행 공백 없이 다른 위치에 부동 숫자가 있는 다른 문자열에서 위의 정규식을 시도했습니다.

$ c="scalar throughput:last11730.559888477 TestDmaMac4.sink.udpApp[0]"
$ egrep -o '[0-9]+[.][0-9]' <<<"$c" |egrep -o '[0-9]+[^.]'
11730
$ perl -pe 's/(.*?)([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730
$ sed -r 's/(.*[^0-9.])([0-9]+)(\.[0-9]+.*)/\2/' <<<"$c"
11730

답변2

l='scalar TestDmaMac4.sink.udpApp[0]   throughput:last     11730.559888477'
read -r -a a <<<"$l"
dc -e "${a[-1]}dX10r^dsa*la/p"

echo "$l" | perl -lane 'print/\d+(?=\.\d+$)/g'

결과

11730

답변3

그렙 사용:

grep -o " [0-9]\{1,\}"

테스트하려면:

echo "scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477" | grep -o " [0-9]\{1,\}"

결과:

11730

관련 정보