Moquery 和 Grep - 返回没有特定属性的类的结果

Moquery 和 Grep - 返回没有特定属性的类的结果

下午好!

我希望对多个类执行查询,并仅返回那些缺少特定属性的类。

例如,在我正在使用的程序中,假设我有一个类Car- 本例中的汽车有一个对象Tyres- 该对象Tyres可以有 1 个或多个属性:

Brand 1 Brand 2 Brand 3

我想做的是运行查询并返回以下类:

没有品牌1

我遇到的问题是,当我运行此查询并 grep 结果时,它似乎返回所有类并简单地忽略 Brand 1,而不是返回满足上述要求的类。

例如,如果类具有用于此参数的目的的Car_1对象,则该对象具有 3 个属性, - 我只想显示没有品牌 3 的类 - 相反,Grep 似乎返回省略了品牌 3 的类。TyresBrand 1 Brand 2 Brand 3

实现我所追求的目标的最佳解决方案是什么?

对于明显的模糊性,我提前表示歉意,我试图对我正在使用的程序保持中立,只专注于以正确的方式 Grepping 结果。

干杯!

答案1

尝试这样的事情:

moquery ..... |
  sed -e 's/^#/\n#/' |
  perl -00 -ne 'print unless /^Tyres\h*:.*\bBrand 1\b/mig'

sed脚本在每个 之前插入一个换行符#。这使得它适合在perl(或awk)中以“段落模式”进行处理。 “段落”是一行或多行文本,它们之间至少有一个空行。

简而言之,sed将其转换(取自 rednectar.net 博客文章的示例数据moquery – Cisco 的 Mysterious Obscure ACI 查询实用程序):

# fv.Tenant
name         : Tenant5
dn           : uni/tn-Tenant5
uid          : 15374
# fv.Tenant
name         : common
dn           : uni/tn-common
uid          : 0
# fv.Tenant
name         : Tenant3
dn           : uni/tn-Tenant3
uid          : 15374

对此:


# fv.Tenant
name         : Tenant5
dn           : uni/tn-Tenant5
uid          : 15374

# fv.Tenant
name         : common
dn           : uni/tn-common
uid          : 0

# fv.Tenant
name         : Tenant3
dn           : uni/tn-Tenant3
uid          : 15374

然后,Perl 脚本将打印除包含“Brand 1”的 Tires 条目之外的所有记录。正则表达式不区分大小写,并\b在“Brand 1”周围使用单词边界标记,以便它不会进行部分匹配(例如“Off-Brand 1”或“Brand 100”)。

如果您需要对记录进行更多处理(例如匹配其他字段,或提取一些数据并对其执行某些操作),您可以执行以下操作:

moquery ..... |
  sed -e 's/^#/\n#/' |
  perl -00 -ne '
    next if /^Tyres\h*:.*\bBrand 1\b/mig;

    ...more perl statements here...;

    print'

或者您可以编写一个独立的 Perl 脚本,而不是使用-n.


也可以看看:ACI 对象 moquery 备忘单 来自思科的社区网站。

相关内容