Мне было интересно узнать, могу ли я получить синтаксический анализ результатов вызова SNMPWALK. Я знаю, что здесь есть несколько вопросов, связанных с этим вопросом. Например, я смотрел и пытался предложенные решения из этих двух вопросов:Bash - Parse snmpwalk output
Чтобы начать здесь является команда SNMPWALK и результат я пытаюсь разобрать:
SNMPWALK Команда:
snmpwalk -v1 -c public 192.168.2.51 -Ovq IF-MIB::ifDescr
SNMPWALK Результат:
Software Loopback Interface 1.
WAN Miniport (SSTP).
WAN Miniport (L2TP).
WAN Miniport (PPTP).
WAN Miniport (PPPOE).
WAN Miniport (IPv6).
WAN Miniport (Network Monitor).
WAN Miniport (IP).
RAS Async Adapter.
Atheros AR8152 PCI-E Fast Ethernet Controller.
Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC.
...
В основном то, что я пытаюсь сделать, это поиск, "Wireless LAN 802.11 PCI-E Nic (?)." где ? представляет значения a-z и удаляет любое избыточное значение после NIC.
По существу из списка выше единственного значения, которое будет возвращено, является Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC.
с удаленной частью Realtek RTL8191SE
. Я также хотел бы, чтобы решение не возвращало элементы, имеющие значения после NIC.
. Например, если дайте что-то вроде этого:
Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC - Deterministic Network Enhancer Miniport-VirtualBox NDIS Light-Weight Filter-0000.
Решение должно отклонить его на основании дополнительных значений в конце.
Вот что мой код в настоящее время выглядит следующим образом:
#!/bin/bash
...
IFS=$'\n'
var=($(snmpwalk -v1 -c public -Ovq $1 IF-MIB::ifDescr))
for i in "${var[@]}"; do
p=$(echo "$i" | sed 's/^.*\(Wireless LAN 802.11n PCI-E NCI.*\)/\1/')
# if [[ "$p" == "Wireless LAN 802.11n PCI-E NCI." ]]; then
echo "$p"
# fi
done
...
То, что я понял из игр с установкой вывода команды SNMPWALK на массив является то, что каждый элемент будет добавлен в качестве разделенных пробелами значений. Таким образом, я сначала устанавливаю IFS в новый разделитель строк. Затем я попытался сопоставить каждую строку, основываясь на том, что я сказал выше.
[Это сообщение должно помочь] (http://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed) – anubhava
Измените свой вопрос, чтобы показать ожидаемый результат, учитывая этот ввод. Я ни для кого не знаю, какая часть вашего ввода - это «связанная MIB», которую вы хотите найти. –
@EdMorton Я обновил свой вопрос, чтобы быть более кратким и простым. – NSaid