ファイルの別の行にある別の文字列の前に文字列があるかどうかをテストする方法

ファイルの別の行にある別の文字列の前に文字列があるかどうかをテストする方法

構成ファイルがあります。

a: 123
b: abc
device: 1000
c: xyz

[old]
a: 120
b: xyz
device: 200
c: abc

「[old]」セクションとその下のすべての項目が常に存在するわけではありません。

ファイルのオプションの「[old]」セクションの前に「device:1000」テキストがあるかどうかを確認するには?

次の(壊れた)コマンド構文に触れましたが、必要なことはできません...

sed -e '0,/^\[/;  /device: /p' configfile ; echo $?

...0,/^\[/ファイルの先頭と最初の列で「[」が最初に表示される部分の間の検索を制限する必要があります。文字列が見つかったかどうかを示す戻りコードを取得しようとしています。

ベストアンサー1

awkオプションの場合:

awk 'BEGIN{o=d=1} /\[old\]/{o=0} /device: 1000/&&o==1{d=0;exit} END{exit d}' file

説明する:

  • BEGIN{o=d=1}:変数の初期化
  • /\[old\]/{o=0}if [old]:設定されていることが確認されましたo=0
  • /device: 1000/&&o==1{d=0;exit}device: 1000見つかったが[old]まだ見つからない場合は、ファイルを確認せずにd=0ブロックを設定してジャンプします。END{}
  • END{exit d}: 与えられた値で終了d

次のように実行します。

awk 'BEGIN{o=d=1} /\[old\]/{o=0} /device: 1000/&&o==1{d=0;exit} END{exit d}' file && echo "contains" || echo "contains not"

おすすめ記事