我知道这里有很多关于解析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似乎是it .3.6.1.2.1.2.2.2.1.2,当它将设备合并时,它会输出所有接口,包括物理和逻辑接口。
非常感谢
发布于 2015-02-03 00:16:38
使用sed命令
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命令
awk -v FS="( \"|[.][0-9]+\"$|\"$)" '$0~/iso.*= STRING: "/{print $2}' my_file发布于 2015-02-02 17:57:41
您可以使用以下sed命令:
sed -i.bak 's/\([^"]*"[^.]*\).*/\1"/' filehttps://stackoverflow.com/questions/28283750
复制相似问题