解析 snmpwalk 输出

Parsing snmpwalk output

我知道这里有很多关于解析 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 并且在池化设备时它输出所有接口,包括物理和逻辑接口。

非常感谢

您可以使用这个 sed 命令:

sed -i.bak 's/\([^"]*"[^.]*\).*/"/' file

使用 sed 命令

sed 's#iso.*= STRING: "\([^".]\+\).*##g' my_file

编辑:使用上面的 sed 命令的解释

#

我使用 # 作为 sed 的分隔符。你可以使用任何其他字符,例如“%”、“~”等...使用不与任何字符冲突的字符是明智的你的模式或变量

iso.*= STRING: " - 匹配字符串 iso 后跟任何字符后跟字符串 =STRING: "

的模式

\([^".]\+\) - 这是上述模式的延续。这部分 [^".]\+ 匹配一个或多个不是 ". 的字符。 \+ 表示 1 个或多个字符。注意我用 \( \) 将这块图案括起来。这是因为我想让 sed 记住这个模式。因为这是我封闭的第一个模式,sed 将这个模式定义为 </code>。将 <code> 视为第一个模式的变量名。所以在模式 iso.*= STRING: " sed 搜索所有不是 ". 的字符并记住它之后,这是我们 answer.This 存储的模式我希望 sed 替换整行与.

.* - 匹配标记模式后的零个或多个字符。我使用它的原因是它匹配行的其余部分并用标记的模式替换整行,即 </code>.</p> <p>注意:只有当您将整行与一个模式匹配,然后在您的正则表达式中标记该模式的一部分以进行替换时,这才会起作用。如果找不到整个模式,则不会进行替换。</p> <p><strong>使用 awk 命令</strong></p> <pre><code>awk -v FS="( \"|[.][0-9]+\"$|\"$)" '[=11=]~/iso.*= STRING: "/{print }' my_file