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 awk
hier 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
-E
In diesem Fall ist die Verwendung von with nicht erforderlich, grep
da 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 -F
with 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 Lost
Dies 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.