2017-02-07 2 views
0

Das Ausführen dieses Befehls zu manipulieren:Wie check_snmp Ausgabe mit String

/usr/lib/nagios/plugins/check_snmp '-C' 'public' '-H' '10.1.1.1' '-l' 'haState' '-o' '.1.3.6.1.4.1.2620.1.5.6.0' 

ergibt dies:

SNMP OK - haState "active" | 

Ich möchte Rohr diesen Befehl zu etwas, das Ausgangs dies:

SNMP OK - haState "active" | state=active 

Ich denke, ich muss irgendwie awk innerhalb von sed verwenden.

Ideen?

+0

zu erreichen Make

echo 'SNMP OK - haState "active" |' | awk '{printf "%s state=%s\n",$0,gensub(/"/, "", "g",$(NF-1))}' SNMP OK - haState "active" | state=active 

d.h | ist ein tatsächlicher Teil der Ausgabe - es ist typisch für Nagios Plugins – user7530513

+0

Was möchten Sie mit der Zeichenfolge tun? – Inian

Antwort

0

eine Pipeline-Aufruf GNU Awk dass

<snmp-command> | awk '{printf "%s state=%s\n",$0,gensub(/"/, "", "g",$(NF-1))}' 
+0

perfekt. Vielen Dank. – user7530513

0

Speichern Sie die Prüfausgabe in einer Variablen, extrahieren Sie den Status durch Regexabgleich und verwenden Sie printf, um die gewünschte Ausgabe zu formatieren und zu drucken.

regex='haState "(.*)"$' 
snmp_output=$(/usr/lib/nagios/plugins/check_snmp '-C' 'public' '-H' '10.1.1.1' '-l' 'haState' '-o' '.1.3.6.1.4.1.2620.1.5.6.0') 
if [[ $? == 0 ]]; then 
    state="unknown" 
    if [[ "$snmp_output" =~ $regex ]]; then 
    state="${BASH_REMATCH[0]}" 
    fi 
    printf "%s state=$state\n" "$snmp_output" 
else 
    : handle the error appropriately 
fi 
+0

Nicht sicher, was ist der Overkill hier. Das Überprüfen des Status des check_snmp-Befehls ist ebenfalls wichtig. – codeforester

+0

Nur gemeint, 'Bash Regex' ist wirklich _slow_ und es gibt viel schnellere Möglichkeiten, dies zu tun. – Inian