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