como posso ler um número com arquivo (mágica)?

4

Eu gostaria de escrever o formato de um desenho com "desenho de arquivo"

Os arquivos começam como:

CAD
A1 
mm

(em branco após A1)

ou:

CAD
A00
m 

(em branco após "m")

Eu tentei algumas coisas como no arquivo magic:

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

mas sem sorte! Existe alguma maneira de resolver este problema? Eu preferiria não obter espaços em branco.

Isso não significa apenas:

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

que resulta em ... Formato = [A1] ... ou ... Unidades = [m]

    
por Horst 26.07.2016 / 18:42

1 resposta

3

Regexes em man magic não são extensivamente detalhados. Mas dê uma olhada nesta resposta brilhante de JigglyNaga.

Para começar, você precisa escapar de vários caracteres em expressões regulares em arquivos mágicos: ^ , + e espaços são exemplos. Aqui estão duas maneiras de fazer seu arquivo mágico funcionar para os arquivos que você descreve:

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

Isso ignora os espaços e, portanto, imprime o seguinte:

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

Uma maneira melhor (na minha humilde opinião) é manter espaços nas strings Versão e Unidades :

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

(Note que eu precisava escapar dos espaços, mesmo que eles estejam dentro de grupos de caracteres).

Isto imprime o seguinte:

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

Referências:

por 26.07.2016 / 19:55