2017-02-07 75 views
0

運行此命令check_snmp輸出:如何操作用繩子

/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' 

產生這樣的:

SNMP OK - haState "active" | 

我想管這個命令的東西,將輸出這樣的:

SNMP OK - haState "active" | state=active 

我想我需要以某種方式在sed中使用awk。

想法?

+0

|是輸出的實際部分 - 這對於Nagios插件是很典型的 – user7530513

+0

你想用字符串做什麼? – Inian

回答

0

做一個管網上呼籲GNU Awk實現這一目標,

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

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

完美。謝謝。 – user7530513

0

將檢查輸出存儲在變量中,通過正則表達式匹配提取狀態,並使用printf來格式化和打印所需的輸出。

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

不知道什麼是這裏的矯枉過正。檢查check_snmp命令的狀態也很重要。 – codeforester

+0

只是意思,'bash regex'真的很慢,而且有更快的方法來做到這一點。 – Inian