私はSNMPWALK呼び出しの結果を解析する助けを得ることができるのだろうかと思っていました。私は、ここにほとんどこの正確な質問に関連するいくつかの質問があることを知っています。例えば、私が見て、これら二つの質問からの提案解決しようとした:ここで開始するにはBash - Parse snmpwalkの出力
を私が解析しようとしています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.
...
基本的に私が何をしようとしています何のための検索です。 "(?)無線LAN 802.11 PCI-Eニック。"どこ ?値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