Cisco インターフェイスの正規表現 awk

Cisco インターフェイスの正規表現 awk

次のような特定の属性を使用してCiscoインターフェイス部分を解析するSed / GrepまたはAwk正規表現があるかどうか疑問に思います。

.txt ファイルの内容

!
interface FastEthernet0/1
 no ip unreachables
!
interface FastEthernet0/2
 no ip proxy-arp
!

スクリプト:

#!/bin/bash
VALUE="no ip proxy-arp"
awk -v RS='!\n' -v PATTERN=${VALUE} '/$PATTERN/' file.txt | awk '/^interface/';
exit 0

問題は、シェルから直接lineを実行すると機能しますが、スクリプトで実行すると機能しないことです。

実行してみると、変数の値を変更できないbash -xことがわかります。awk

どんな提案がありますか?

ベストアンサー1

これがシェルで動作するとは信じ難いです。それにもかかわらず、このコードにはいくつかのエラーが含まれており、IMHOのアプローチが間違っています。

//awkは変数ではなく文字列を期待します。これは定数正規表現です。したがって、シェルが変数をそこに入れるようにするか~

回避策:

awk -v RS='!\n' -v PATTERN="${VALUE}" '$0 ~ PATTERN' file.txt | 
  awk '/^interface/'

私はこれがうまくいくことに驚きました。文書のRS設定のため、望ましくない「!」が印刷されると予想しました。しかし、私はこれがより良いと思います。

awk -v PATTERN="${VALUE}" \
  '$0 ~ PATTERN { print previousline; }; { previousline=$0; }' file.txt

またはハードコードモードを使用する

awk '/no ip proxy-arp/ { print previousline; }; { previousline=$0; }' file.txt

または、シェルを使用してパターンを作成します。

awk /"$VALUE"/' { print previousline; }; { previousline=$0; }' file.txt

おすすめ記事