ファイルから数字を読み取る方法(魔法)は何ですか?

ファイルから数字を読み取る方法(魔法)は何ですか?

「ファイルの描画」を使って画像をフォーマットしたいと思います。

ファイルは次のように始まります。

CAD
A1 
mm

(A1 次は空白)

または:

CAD
A00
m 

(「m」の後にスペースを入れてください)

私はファイルマジックのようなものを試しました。

0      string  CAD\n     CAD-Drawing
>&0    regex   ^A[0-9]+  Format=[%s]
>>&0   search  \n
>>>&0  regex   ^[a-z]+   Units=[%s]

しかし幸運はありません!この問題を解決する方法はありますか?スペースがないことをお勧めします。

これは次のことだけでなく、次のことを意味します。

0     string  CAD\n  CAD-Drawing
>&0   string  x      Format=[%s]
>>&0  string  x      Units=[%s]

結果は...format=[A1]...または...unit=[m]です。

答え1

の正規表現はman magicそれほど詳細ではありません。しかし、これを見てください。素晴らしい答え著者: JigglyNaga。

まず、マジックファイルの正規表現から数文字をエスケープする必要があります。^スペース+はその例です。説明するファイルに対してマジックファイルを動作させるには、次の2つの方法があります。

0      string  CAD\n       CAD-Drawing
>&0    regex   \^A[0-9]\+  Format=[%s]
>>&0   search  \n
>>>&0  regex   \^[a-z]\+   Units=[%s]

スペースを無視するので、次のものが印刷されます。

$ file -m mmm file[12].cad 
file1.cad: CAD-Drawing Format=[A1] Units=[mm]
file2.cad: CAD-Drawing Format=[A00] Units=[m]

(私の謙虚な意見では)より良いアプローチは次のとおりです。バージョンそして単位ひも:

0      string  CAD\n         CAD-Drawing
>&0    regex   \^A[0-9\ ]\+  Format=[%s]
>>&0   search  \n
>>>&0  regex   \^[a-z\ ]\+   Units=[%s]

(文字グループ内にあってもスペースをエスケープする必要があります。)

これにより、次のものが印刷されます。

$ file -m mmm file[12].cad 
file1.cad: CAD-Drawing Format=[A1 ] Units=[mm]
file2.cad: CAD-Drawing Format=[A00] Units=[m ]

引用:

関連情報