構成ファイルがあります。
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"