как я могу прочитать число с файлом (магия)?

Я хотел бы написать формат чертежа с «чертежом файла»,

Файлы начинаются как:

CAD A1 mm 

(Пустой после A1)

или:

 CAD A00 m 

(Пустое после «м»)

Я пробовал что-то вроде магии файла:

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

но не повезло! Есть ли способ решить эту проблему? Я бы предпочел получить пробелы.

Это означает не просто:

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

что приводит к … Формат = [A1] … или … Единицы = [м]

One Solution collect form web for “как я могу прочитать число с файлом (магия)?”

Регулярные выражения в man magic не являются подробными подробностями. Но посмотрите на этот блестящий ответ JigglyNaga.

Для начала вам нужно избежать нескольких символов в регулярных выражениях в магических файлах: ^ , + и пробелы – примеры. Вот два способа сделать ваш магический файл для файлов, которые вы описываете:

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

Это игнорирует пробелы и, следовательно, печатает следующее:

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

Лучшим способом (по моему скромному мнению) является сохранение пробелов в строках Version и Units :

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

(Обратите внимание, что мне нужно было избегать пробелов, даже если они находятся внутри групп символов).

Это отображает следующее:

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

Рекомендации:

  • пример магии с помощью поиска и / или регулярного выражения
Linux и Unix - лучшая ОС в мире.