Преобразовать выходную оболочку в JSON - PullRequest
0 голосов
/ 25 марта 2020

У меня есть 3 файла, которые отвечают за подключение брандмауэра и вводят меня в ответ на использование процессора, я хотел бы преобразовать вывод .exp в JSON, как это сделать?

монитор .exp:

# It has more data above, I posted only the part that matters

expect "#"
send "\ r"

expect "#"
send "show cpu usage \ r"

expect "#"
send "exit \ r"}
}

monitor.conf:

10.0.0.0:10.0.0.1:local-dns:admin@admin#:Brazil

monitor. sh:

for i in `cat /tmp/monitoring/monitor.conf | grep -v ^#`
do
bindip=`echo $i|cut -d: -f1`
endip=`echo $i|cut -d: -f2`
name=`echo $i|cut -d: -f3`
pass=`echo $i|cut -d: -f4`
company=`echo $i|cut -d: -f5`
/usr/bin/expect -f /tmp/monitoring/monitor.exp $bindip $endip $name $pass $company
done

Вывод шоу:

firewall-customer/pri/act#
firewall-custome/pri/act# show cpu usage
CPU utilization for 5 seconds = 90%; 1 minute: 85%; 5 minutes: 80%

Желаемый:

{'cpu usage': 'CPU utilization for 5 seconds = 90%; 1 minute: 85%; 5 minutes: 80%'}

1 Ответ

1 голос
/ 25 марта 2020

Решение этого в bash, а не в ожидаемом:

regex=$'CPU utilization for [^\r\n]*'
output=$(/usr/bin/expect -f monitor.exp "$bindip" "$endip" "$name" "$pass" "$company")
if [[ $output =~ $regex ]]; then
  jq -nc --arg cpu_usage "${BASH_REMATCH[0]}" '{"cpu usage": $cpu_usage}'
fi

В bash, [[ $var =~ $regex ]] сопоставляет содержимое $var с регулярным выражением в $regex, а затем помещает в результате получается массив с именем BASH_REMATCH.

...