\s*{\s*}\s* パターンに基づいてファイル全体の内容を確認するには?

\s*{\s*}\s* パターンに基づいてファイル全体の内容を確認するには?

busyboxを使用してファイル全体の内容がパターンに従うことを確認する方法は\s*{\s*}\s*?以前のように個々の行を確認するのではなく、ファイル全体を最初から最後まで確認する必要がありますgrep

通常のように、ファイルに空のJSONオブジェクトが含まれているかどうかを検出する必要があります。

   
   { 

  }    



以下は、テンプレート要件を満たさないファイルコンテンツの例です。

{
"field": {}
}

{}
   
   { 

  }    

ベストアンサー1

busyboxを使用してファイル全体の内容がパターンに従うことを確認する方法は\s*{\s*}\s*

通常、JSONファイルの処理に伴う周辺の問題を考慮せずに文字通りこの質問に答えるには...

私が最初に知りたかったのは、BusyboxにPerl正規表現をサポートするものがあることでした。しかし、とにかく\s使えなくてもPOSIX REに該当する\sのは[[:space:]]*。 (Busyboxは\s少なくとも私のLinuxではこれを許可しているようです。)

-z1行ではなくファイル全体を一致させる場合、Busyboxのgrepには改行の代わりにNULを「行」終端として使用するオプションがあります。CONFIG_EXTRA_COMPAT私のUbuntu 22.04が設定したように見えるコンパイル時間オプションによって異なりますが、YMMVです。テキストファイルにはNULを含めないでください。ファイル全体と一致する必要があります。

私はまた、「ファイル全体を最初から最後まで確認してください」と言うとき、パターンがファイルの先頭と最後にロックされている必要があり、ファイルの途中で十分ではないことを意味すると仮定します。正規表現エンジンは通常、どこでも一致するものを見つけるため、パターンの開始/終了をロックするには明示的に^/アンカーを使用する必要があります。$

だから:

$ printf '   \t \n   {  \n\t  \n } \n \n\n' > test1
$ cat test1

   {

 }


$ busybox grep -qz '^[[:space:]]*{[[:space:]]*}[[:space:]]*$' test1 && echo match
match

おすすめ記事