Como usar o FINDSTR para pesquisar em uma linha específica?

2

Eu tenho um arquivo example.txt e uma string "Hi" e o começo da 15ª linha.

O código requerido para o findstr deve ser:

findstr /b /n "Hi" "example.txt"

Existe algo que pode procurar por "Hi" string apenas na linha de comando (Aqui 15).

Por favor, ajude!

    
por Ekagra Sinha 28.12.2015 / 14:13

2 respostas

1

How to use FINDSTR to search in a specific line?

The required code for findstr should be:

findstr /b /n "Hi" "example.txt"

Is there something that can search for "Hi" string only in the commanded line

Com base no texto da sua pergunta, vou assumir algumas coisas:

  1. Você deseja encontrar uma string APENAS e nada mais em uma linha específica
  2. Como seu exemplo FINDSTR usa a string /B de "Hi" está apenas no início da linha e depois é seguida por um espaço para outra palavra, etc. depois dela.
  3. Como o seu exemplo usa o /N swtich, presumo que você só o use para imprimir as linhas com as quais as cadeias correspondentes são encontradas, para que você possa executar o comando FINDSTR para obter a linha SOMENTE 15.

Aqui estão alguns comandos de exemplo (não em lote) para executar esta

(Você pode copiar e colar todas essas linhas assim que as variáveis forem conectadas adequadamente para serem executadas sem ser um script em lote.)

SET SearchFile=C:\Path\example.txt
SET TmpSearchFile=%Temp%\~tmpSearch00.txt
SET String=Hi
SET LineNum=15

FINDSTR /B /N "%String%" "%SearchFile%" > "%TmpSearchFile%"
FOR /F "USEBACKQ TOKENS=2 DELIMS=: " %A IN ('"FINDSTR /B "%LineNum%:%String%" "%TmpSearchFile%""') DO ECHO %~A

Isso basicamente canaliza o primeiro FINDSTR com o número da linha da string correspondente no início de todas as linhas para um arquivo temporário (se existir, ele será sobrescrito). Em seguida, ele pesquisa esse arquivo temporário para a cadeia do número da linha, além de dois-pontos e a cadeia (por exemplo, "15: Hi"). Depois, usei um loop FOR /F , fazendo o colon e o space o delimiter com token de 2 . Ele irá então ECHO da string APENAS como você requisita (substitua ECHO com algum outro comando se necessário).

    
por 28.12.2015 / 17:33
0

Eu não faria isso com lote, mas poderia com o Powershell.

Para determinar se a 15ª linha de um arquivo começou com a string 'Hi', eu usaria:

if (Get-Content -Path x:\pathto\file.txt -First 15 '
    | Select-Object -Last 1 '
    | Select-String -Pattern '^Hi' -Quiet)
{
    # do my thing here...
}

Isso deve garantir que o arquivo inteiro não seja lido, apenas as primeiras 15 linhas.

É claro que a 15ª linha é arbitrária. Dependendo de onde você realmente deseja procurar, convém ajustar os parâmetros para Get-Content e Select-Object para reduzir a quantidade de leituras.

    
por 16.05.2017 / 18:51