O arquivo file (1) apenas informa como executar o comando. Para uma descrição dos padrões mágicos, veja magia (5) . No entanto, a seção sobre regex não é especialmente detalhada. Uma grande variedade de exemplos de seu uso pode ser encontrada nos arquivos padrão que vêm com ele: link
Seu principal problema é que o cursor precisa ser salvo: \^ para o início da linha, \^ para o literal ^ . Eu não trabalhei com o significado especial que o ^ sem escape tem. Espaços também podem ser escapados, tornando o padrão um pouco mais legível.
Você pretende restringir a correspondência a um intervalo de linhas estreitas. regex usa a opção /<length> (depois da palavra regex , não depois do padrão), de modo que coloca um limite de onde a pesquisa termina . Se o comprimento for seguido por um l , isso significa linhas em vez de bytes. Em meus testes, /1l só pode corresponder a uma linha vazia - uma linha não vazia, mesmo quando se usa o deslocamento inicial exato, requer pelo menos /2l .
Para o início da pesquisa, offset é interpretado como uma contagem de bytes, mesmo com regex . (Pré-versão 5.19, a documentação sugere que ela é interpretada como uma "contagem de linhas", mas essa declaração foi removida sem alteração de código correspondente, por isso duvido que seja preciso mesmo antes disso.) Poderia utilizar o desvio &0 para iniciar a pesquisa a partir do final do jogo anterior, mas isso não fará muita diferença quando o jogo anterior terminou no meio da primeira linha.
Além disso, "início da linha" também corresponde a "início do intervalo de pesquisa" (ou seja, de offset ), independentemente de ter sido o início de uma linha no arquivo.
Então, para combinar as coisas mais estritamente, você pode usar um regexp de linha completa em todas as linhas e usar o deslocamento &1 na próxima partida, para ignorar a nova linha anterior e estar no lugar certo para a \^ para trabalhar como esperado. Isso pode ser um exagero para identificar seus tipos de arquivo personalizados.
Finalmente, você não precisa repetir as partes comuns. O nível de > indentação significa que um padrão deve ser tentado quando os padrões anteriores no mesmo nível falharem.
Juntando tudo isso:
0 regex/2l \^Project\ Units:.*$
>&1 regex/2l \^Units\ &\ Scale.*$
>>&1 regex/1l \^$
>>>&1 regex/2l \^Object\ Point\ ID Photo Modeler 2D export table
>>>&1 regex/2l \^Id,Name,Photos Photo Modeler 3D export table