Retornando o linenumber de uma substring correspondente em Batch

3

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

É possível pesquisar um arquivo usando apenas componentes do Windows e utilitários operacionais Commandline para retornar o número da linha da peça 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 foi alterado ou pode ser alterado toda vez que ele gerar o arquivo.

    
por MegaXLR 12.10.2015 / 23:21

2 respostas

1

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

Como sua string de pesquisa inclui um espaço, você deve usar a opção /C:"search string" , caso contrário, a string 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 opção /B . Como alternativa, você pode adicionar a opção /R para tratar a pesquisa como uma expressão regular e, em seguida, usar a âncora ^ de início de linha no início de sua sequência 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 de lote, deverá duplicar as porcentagens:

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

Use findstr /N strings filename para pesquisar instâncias de strings no arquivo filename .

Nota: /N "Imprime o número da linha antes de cada linha que corresponde a"

Para mais informações de uso, execute findstr /?

    
por 12.10.2015 / 23:25

Tags