如何使用字符串操作 check_snmp 输出

How to manipulate check_snmp output with 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'

产生这个:

SNMP OK - haState "active" |

我想将此命令通过管道传递给将输出以下内容的内容:

SNMP OK - haState "active" | state=active

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

想法?

将检查输出存储在变量中,通过正则表达式匹配提取状态,并使用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

GNU Awk 进行 pipe-line 调用以实现该目的,

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

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