2017-02-07 4 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 

Я думаю, мне нужно как-то использовать awk внутри sed.

идеи?

+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' действительно _slow_, и есть намного более быстрые способы сделать это. – Inian

Смежные вопросы