首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析snmpwalk输出

解析snmpwalk输出
EN

Stack Overflow用户
提问于 2015-02-02 17:54:01
回答 2查看 1.7K关注 0票数 0

我知道这里有很多关于解析snmpwalk响应的问题和答案,但是在这里我似乎找不到相关的答案。我不擅长分析文本,但我正在尽我最大的努力去学习东西。

我正在用命令轮询我的Juniper设备:

代码语言:javascript
复制
snmpwalk -v2c -c blablabla x.x.x.x iso.3.6.1.2.1.2.2.1.2

收到的答复如下:

代码语言:javascript
复制
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"

由于在这个特定设备上有许多接口,所以输出是完整的。我需要解析这个输出,以便只获得物理接口。例如,字符串外:

代码语言:javascript
复制
iso.3.6.1.2.1.2.2.1.2.2557 = STRING: "xe-4/2/1.1514"

我只需要提取xe-4/2/1等其他行。基本的,在字符后面的“点前的一切”。请注意,有这样的行:

代码语言:javascript
复制
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似乎是it .3.6.1.2.1.2.2.2.1.2,当它将设备合并时,它会输出所有接口,包括物理和逻辑接口。

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 00:16:38

使用sed命令

代码语言:javascript
复制
sed 's#iso.*= STRING: "\([^".]\+\).*#\1#g' my_file

编辑:使用上面的sed命令进行说明

The #

我使用#,因为sed的delimiter..You可以使用任何其他字符,如"%","~“etc...It是明智的使用不与模式或变量中的任何字符冲突的字符

iso.*= STRING: " -将一个模式与字符串iso匹配,后面跟着字符串=STRING: "

\\([^".]\+\\) -这是上面模式的延续。此部分[^".]\+匹配一个或多个不是".的字符。\+的意思是一个或多个字符。注意,我丢失了\( \)的这段模式。这是因为我希望sed记住这个pattern..since --这是我所附的第一个模式,sed将这个模式定义为\1。将\1视为第一种模式的变量名。因此,在模式iso.*= STRING: " sed搜索所有不是".的字符之后,请记住它,这是我们的answer.This存储模式,我希望sed用它替换整行。

.* -在标记模式之后匹配零或多个字符。我使用它的原因是,它匹配行的其余部分,并用标记的模式(即\1 )替换整行。

注意:只有当您将整行与模式匹配,然后在regex中标记模式的一部分以供替换时,这才会有效。如果没有找到整个模式,则不会发生替换。

使用awk命令

代码语言:javascript
复制
awk -v FS="( \"|[.][0-9]+\"$|\"$)" '$0~/iso.*= STRING: "/{print $2}' my_file
票数 0
EN

Stack Overflow用户

发布于 2015-02-02 17:57:41

您可以使用以下sed命令:

代码语言:javascript
复制
sed -i.bak 's/\([^"]*"[^.]*\).*/\1"/' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28283750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档