Befehl zum Abrufen ausschließlich von Zahlen aus einer Ausgabe

Befehl zum Abrufen ausschließlich von Zahlen aus einer Ausgabe

SSH zum Remote-Gerät und Abrufen des Paketverlustzählers.

$ ssh [email protected] cat /proc/net/pf_ring/*eth0* | grep -E "Tot Pkt Lost" 

Ausgabe des obigen Befehls:

Tot Pkt Lost       : 1083761951

Ich brauche einen Befehl, der nur die verlorenen Tot-Pkt-Nummern abruft.

Antwort1

Wenn Sie GNU haben grep, können Sie Folgendes tun:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    grep -oP 'Tot Pkt Lost\s*:\s*\K\d+'
1083761951

Aber awkhier könnte es sowohl einfacher als auch portabler sein:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    awk '/Tot Pkt Lost/{print $NF}'
1083761951

Antwort2

-EIn diesem Fall ist die Verwendung von with nicht erforderlich, grepda Sie keinen erweiterten regulären Ausdruck verwenden. Außerdem erweitern Sie das Globbing-Muster auf dem lokalen Computer und nicht auf dem Remote-System, was zu falschen Ergebnissen führen kann.

Ihr Befehl sollte daher wie folgt umgeschrieben werden:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'

Ich verwende hier -Fwith grep, da ich mit einer Zeichenfolge und nicht mit einem regulären Ausdruck übereinstimme. Ich zitiere auch den Befehl, der auf dem Remote-Host ausgeführt werden soll, damit das Globbing-Muster dort und nicht lokal erweitert wird.

Dies sollte die gleiche Ausgabe liefern:

Tot Pkt Lost       : 1083761951

Um nur Ziffern daraus zu erhalten, geben Sie es einfach weiter grep -E -o '[[:digit:]]+':

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost' |
grep -E -o '[[:digit:]]+'

Alternativ mit sed:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
sed -n 's/^Tot Pkt Lost.*: //p'

Tot Pkt LostDies würde die Zeichenfolge am Anfang und danach jeder Zeile abgleichen . Es würde die übereinstimmende Zeichenfolge löschen und den Rest der Zeile drucken. Alle anderen Daten werden verworfen.

verwandte Informationen