Retornando o número de linha de uma substring correspondente em lote

Retornando o número de linha de uma substring correspondente em lote

Quero retornar o número da linha em um arquivo que tenha sempre o mesmo prefixo, mas o restante pode variar.

É possível pesquisar um arquivo usando apenas componentes padrão do Windows e utilitários operacionais Commandline para retornar o número da linha da parte correspondente.

Um exemplo da linha que estou procurando é:

</TR></TABLE><TABLE cellspacing... Mais código que pode variar

A linha no arquivo é a saída de um gerador e, portanto, não tenho certeza do que mudou ou pode mudar toda vez que o arquivo for gerado.

Responder1

FINDSTR é usado para pesquisar texto em um arquivo, imprimindo cada linha que corresponde à pesquisa. A /Nopção faz com que o número da linha seja anexado a cada linha de saída correspondente como LineNumber:FullTextOfMatchingLine.

Como sua sequência de pesquisa inclui um espaço, você deve usar a /C:"search string"opção; caso contrário, a sequência de pesquisa será interpretada como vários termos de pesquisa delimitados por espaço.

Você deseja que a pesquisa corresponda apenas ao início da linha, então você precisa da /Bopção. Alternativamente, você pode adicionar a /Ropção de tratar a pesquisa como uma expressão regular e então usar a ^âncora do início da linha no início da sua string de pesquisa.

findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"

Você pede apenas o número da linha, sem o texto da linha correspondente. Você pode usar FOR /F para extrair o(s) número(s) de linha desejado(s).

for /f "delims=:" %A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do @echo %A

Se você colocar o comando em um arquivo em lote, deverá dobrar as porcentagens:

@echo off
for /f "delims=:" %%A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do echo %%A

Responder2

Use findstr /N strings filenamepara procurar instâncias de stringsno arquivo filename.

Nota: /N"Imprime o número da linha antes de cada linha correspondente"

Para obter mais informações de uso, executefindstr /?

informação relacionada