Ich habe diese folgende Zeile
scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477
11730
Ich möchte nur aus dieser Zeile extrahieren . Wie kann ich das mit machen grep
? Ich möchte die Zahl nach dem Komma ignorieren und brauche nur die Ziffern vor dem Komma.
(Hinweis: Es gibt eine{Leertaste}{Tab}Folge, die jeweils trennt udpApp[0]
, throughput:last
und die Zahl, die mit beginnt 11730
.)
Antwort1
Der folgende reguläre Ausdruck gleicht jede Gleitkommazahl im Format ab [0-9].[0-9]
und gibt den ganzzahligen Teil dieser Gleitkommazahl zurück.
$ 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
Zu Testzwecken habe ich den obigen regulären Ausdruck auch in einem anderen String mit einer Gleitkommazahl an einer anderen Position ohne führendes Leerzeichen ausprobiert:
$ 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
Antwort2
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'
Ergebnis
11730
Antwort3
Verwenden von Grep:
grep -o " [0-9]\{1,\}"
Zu testen:
echo "scalar TestDmaMac4.sink.udpApp[0] throughput:last 11730.559888477" | grep -o " [0-9]\{1,\}"
Ergebnisse:
11730