Grep com contexto sobre linhas combinadas no Windows

1

Eu quero pesquisar em arquivos, recursivamente, com um padrão para o nome do arquivo, para uma determinada string, em um prompt de comando do Windows 7. Eu estou familiarizado com o Unix. Até agora,

findstr /spin /c:"main" *.py

é um bom substituto para

find . -name "*.py" -exec grep -nH "main" {} \;

Agora, se eu quiser mostrar algum contexto para cada linha correspondente (algumas linhas antes e depois), como eu faria isso? O comando do Unix é

find . -name "*.py" -exec grep -nH -B 2 -A 2 "main" {} \;

A partir de agora, eu usei o MinGW, e acho que o UnxUtils, o GnuWin32 etc. podem funcionar, mas estou procurando um comando nativo do Windows ou uma seqüência / pipe de comandos.

EDITAR : Já existe uma boa resposta postada, que fornece uma saída contínua de cor única. Como uma questão desmembrada, existe alguma maneira de colorir a primeira linha da sequência relatada para cada descoberta, de modo que se possa facilmente distinguir cada sequência? Pode a informação sobre o arquivo / linha não. ser também colorido? Seria bom ter algo configurável no perfil (por exemplo, greping ">"), então o mesmo comando dado na solução fornece uma saída com cores. Powershell: Colorir corretamente a saída Get-Childitem de uma vez por todas é provavelmente relevante ...

    
por sancho.s 18.12.2013 / 02:00

1 resposta

4

O Windows 7 já tem o Powershell instalado.

para a linha de comando do Powershell

PowerShell WIN + R

depois, no prompt de comando do powershell, você pode tentar algo como

gci -r -fi '*.py' | Select-String -patt "main" -context 2,3

em que gci é Get-ChildItem     -r ou -recursar para recursivo     -fi ou -filter para os arquivos correspondentes * .py     -patt ou padrão para correspondência de string "main"     -co ou -context 2,3 para 2 linhas antes de 3 depois de

linhas de saída com o maior que o símbolo no início indicam as linhas correspondentes

---------------- EDIT ABAIXO --------------------

Preparado para tornar a saída mais legível & com cor para arquivo e linha de contexto.

gci -r -fi '*.py'| Select-String -pattern "main" -context 2,3 | foreach { "";
$padlength = (”{0}       ” -f $_.LineNumber).Length
$pad = ” “*$padlength
$drawlength = (”{0}{1}: ” -f $_.Path, $_.LineNumber).Length
$draw = "-"*$drawlength
$(""| foreach {$_.Trim().Insert(0,$draw)});"";""
Write-Host -Fore Blue $_.Path; "";""
$($_.Context.PreContext | foreach {$_.Trim().Insert(0,$pad)})
Write-Host -Fore Magenta $(”LINE {0}: {1}” -f $_.LineNumber, ($_.Line).Trim())
$($_.Context.PostContext | foreach {$_.Trim().Insert(0,$pad)})
"";""}

referenciado de: link

    
por 18.12.2013 / 15:48

Tags