我知道解析snmpwalk响应有很多问题和答案,但我似乎无法在这里找到相关的答案。我不擅长解析文本,但我正在尽力学习东西。
我正在使用命令轮询我的Juniper设备:
snmpwalk -v2c -c blablabla x.x.x.x iso.3.6.1.2.1.2.2.1.2
获得以下回复:
iso.3.6.1.2.1.2.2.1.2.2548 = STRING: "xe-4/0/1.3461"
iso.3.6.1.2.1.2.2.1.2.2549 = STRING: "xe-4/0/2.3462"
iso.3.6.1.2.1.2.2.1.2.2550 = STRING: "xe-4/0/2.3461"
iso.3.6.1.2.1.2.2.1.2.2551 = STRING: "xe-4/0/3.3462"
iso.3.6.1.2.1.2.2.1.2.2552 = STRING: "xe-4/0/3.3461"
iso.3.6.1.2.1.2.2.1.2.2557 = STRING: "xe-4/2/1.1514"
iso.3.6.1.2.1.2.2.1.2.2558 = STRING: "xe-4/2/1.1634"
由于此特定设备上有许多接口,因此省略输出。 我需要解析这个输出,以便我只能获得物理接口。例如,字符串:
iso.3.6.1.2.1.2.2.1.2.2557 = STRING: "xe-4/2/1.1514"
我需要仅提取xe-4/2/1,依此类推其他行。基本上,在字符“之前的所有内容之后。请注意有这样的行:
iso.3.6.1.2.1.2.2.1.2.1664 = STRING: "xe-4/3/3"
iso.3.6.1.2.1.2.2.1.2.1665 = STRING: "xe-4/1/3.534"
iso.3.6.1.2.1.2.2.1.2.1666 = STRING: "xe-4/1/3.552"
iso.3.6.1.2.1.2.2.1.2.1667 = STRING: "xe-4/3/0.1613"
iso.3.6.1.2.1.2.2.1.2.1296 = STRING: "ae2.1464"
iso.3.6.1.2.1.2.2.1.2.1297 = STRING: "ae2.1503"
iso.3.6.1.2.1.2.2.1.2.1299 = STRING: "ae2.1596"
iso.3.6.1.2.1.2.2.1.2.1300 = STRING: "ae2.2020"
我的最终目标是从这个特定设备中提取所有物理接口。与接口相关的唯一OID似乎是iso.3.6.1.2.1.2.2.1.2,当汇集设备时,它输出所有接口,包括物理和逻辑。
非常感谢
答案 0 :(得分:0)
您可以使用此sed命令:
sed -i.bak 's/\([^"]*"[^.]*\).*/\1"/' file
答案 1 :(得分:0)
使用sed命令
sed 's#iso.*= STRING: "\([^".]\+\).*#\1#g' my_file
编辑:使用上面的sed命令解释
#
我使用#
作为sed的分隔符。您可以使用任何其他字符,例如“%”,“〜”等...使用不会与您的模式中的任何字符冲突的字符是明智的或变量
iso.*= STRING: "
- 匹配带有字符串iso
的模式,后跟任意字符后跟字符串=STRING: "
\\([^".]\+\\)
- 这是上述模式的延续..此部分[^".]\+
匹配一个或多个不是"
或.
的字符。 \+
表示1个或多个字符。注意我通过\( \)
填写这个模式。这是因为我希望sed记住这个模式..因为这是我所附的第一个模式,sed将此模式定义为\1
。将\1
视为第一个模式的变量名称。因此,模式iso.*= STRING: "
sed搜索了所有不是"
或.
的字符并记住它,这是我们的答案。这个存储的模式我想用sed替换整行。
.*
- 在标记的模式后匹配零个或多个字符。我使用它的原因是它匹配行的其余部分并用标记的模式替换整行,即\1
。
注意:仅当您将整条线与图案匹配,然后在正则表达式中标记部分图案以进行替换时,此选项才有效。如果没有找到整个模式,则不会发生替换。
使用awk命令
awk -v FS="( \"|[.][0-9]+\"$|\"$)" '$0~/iso.*= STRING: "/{print $2}' my_file