Moquery と Grep - 特定の属性を持たないクラスの結果を返す

Moquery と Grep - 特定の属性を持たないクラスの結果を返す

良い午後です!

複数のクラスに対してクエリを実行し、特定の属性が欠落しているクラスのみを返したいと思います。

たとえば、私が作業しているプログラムにCarオブジェクトがあるクラス(この場合は車)があるとしますTyres。そのオブジェクトはTyres1 つ以上のプロパティを持つことができます。

Brand 1 Brand 2 Brand 3

私が望むのは、クエリを実行して次のクラスを返すことです。

ブランドなし1

私が経験している問題は、このクエリを実行して結果をgrepするときに上記の要件を満たすクラスを返すのではなく、すべてのクラスを返し、単にブランド1を無視するように見えることです。

たとえば、クラスにこのパラメータの目的でCar_13つの属性を持つオブジェクトがある場合 - ブランド3を持たないクラスのみを表示したいと思います。代わりに、Grepはブランド3を省略したクラスを返すようです。TyresBrand 1 Brand 2 Brand 3

私が望むことを達成するための最善の解決策は何ですか?

明白なあいまいさについて事前にお詫び申し上げます。私は私が使用しているプログラムについて中立を維持し、正しい方法で結果を特定することに集中しようとしています。

乾杯!

答え1

次のようにしてみてください。

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

スクリプトsedは各前に改行文字を挿入します#。これはperl(または)awkの「短絡モード」で処理するのに適しています。 「段落」は、テキスト間に少なくとも1行の空白行がある1つ以上のテキスト行です。

つまり、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「ブランド1」の周りに単語の境界マークを使用するため、部分一致(例:「オフブランド1」または「ブランド100」)は実行されません。

レコードに対して追加の処理(たとえば、他のフィールドの一致、一部のデータ抽出、および関連タスクの実行)を実行する必要がある場合は、次のことができます。

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

    ...more perl statements here...;

    print'

または、.NET Frameworkを使用する代わりにスタンドアロンPerlスクリプトを作成することもできます-n


また見なさい:ACI オブジェクト moquery チートシート シスコのコミュニティウェブサイト。

関連情報