1

Я хочу искать в файлах, рекурсивно, с шаблоном имени файла, для данной строки, в командной строке Windows 7. Я знаком с Unix. До сих пор,

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

хорошая замена для

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

Теперь, если я хочу показать некоторый контекст для каждой совпавшей строки (несколько строк до и после), как бы я это сделал? Команда Unix

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

На данный момент я использовал MinGW, и я думаю, что UnxUtils, GnuWin32 и т.д. Могут работать, но я ищу собственную команду Windows или последовательность / последовательность команд.

РЕДАКТИРОВАТЬ: уже есть один хороший ответ, который дает непрерывный, цветной вывод. В качестве побочного вопроса, есть ли способ раскрасить первую строку последовательности, сообщенной для каждой находки, чтобы можно было легко различить каждую последовательность? Может информация о файле / строке нет. быть также раскрашенным? Было бы хорошо иметь что-то настраиваемое в профиле (например, с помощью greping ">"), поэтому та же самая команда, приведенная в решении, дает вывод с цветами. Powershell: правильная раскраска выходных данных Get-Childitem раз и навсегда актуальна ...

1 ответ1

4

В Windows 7 уже установлен Powershell.

для командной строки Powershell

WIN+R powershell

затем из командной строки powershell вы можете попробовать что-то вроде

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

где gci - это Get-ChildItem -r или -recurse для рекурсивного -fi или -filter для соответствующих файлов * .py -patt или шаблон для совпадающей строки "main" -co или -context 2,3 для 2 строк до 3 после

строки, выводимые с символом больше, чем в начале, указывают на совпадающие строки

---------------- РЕДАКТИРОВАТЬ НИЖЕ --------------------

Убран, чтобы сделать вывод более читабельным и с цветом для файла и контекстной строки.

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)})
"";""}

ссылка с:http://msmvps.com/blogs/richardsiddaway/archive/2013/01.aspx

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .