Ответы:
(Я все еще поклонник PowerGREP , но я больше им не пользуюсь.)
Я знаю, что вы уже упоминали об этом, но PowerGREP потрясающий .
Некоторые из моих любимых функций:
Теперь я понимаю, что другие инструменты grep могут выполнять все вышеперечисленное. Просто PowerGREP упаковывает все функциональные возможности в очень простой в использовании графический интерфейс.
От тех же замечательных людей, которые принесли вам RegexBuddy и с которыми у меня нет никакой связи, кроме любви к их вещам. (Следует отметить, что RegexBuddy включает в себя базовую версию grep (для Windows) и стоит намного меньше, чем PowerGREP.)
FINDSTR довольно мощный, поддерживает регулярные выражения и имеет преимущества уже на всех машинах Windows.
c:\> FindStr /?
Searches for strings in files.
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ ...]]
/B Matches pattern if at the beginning of a line.
/E Matches pattern if at the end of a line.
/L Uses search strings literally.
/R Uses search strings as regular expressions.
/S Searches for matching files in the current directory and all
subdirectories.
/I Specifies that the search is not to be case-sensitive.
/X Prints lines that match exactly.
/V Prints only lines that do not contain a match.
/N Prints the line number before each line that matches.
/M Prints only the filename if a file contains a match.
/O Prints character offset before each matching line.
/P Skip files with non-printable characters.
/OFF[LINE] Do not skip files with offline attribute set.
/A:attr Specifies color attribute with two hex digits. See "color /?"
/F:file Reads file list from the specified file(/ stands for console).
/C:string Uses specified string as a literal search string.
/G:file Gets search strings from the specified file(/ stands for console).
/D:dir Search a semicolon delimited list of directories
strings Text to be searched for.
[drive:][path]filename
Specifies a file or files to search.
Use spaces to separate multiple search strings unless the argument is prefixed
with /C. For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y. 'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.
Regular expression quick reference:
. Wildcard: any character
* Repeat: zero or more occurances of previous character or class
^ Line position: beginning of line
$ Line position: end of line
[class] Character class: any one character in set
[^class] Inverse class: any one character not in set
[x-y] Range: any characters within the specified range
\x Escape: literal use of metacharacter x
\<xyz Word position: beginning of word
xyz\> Word position: end of word
Пример использования: findstr text_to_find *
или рекурсивный поискfindstr /s text_to_find *
GrepWin Бесплатный и открытый исходный код (GPL)
Я использовал grepWin, который был написан одним из ребят из tortoisesvn. Работает ли на Windows ...
Обновление июль 2013:
Еще один инструмент grep, который я сейчас использую в Windows, это AstroGrep :
Его способность показывать мне больше, чем просто поиск строки (то есть --context = NUM grep командной строки) неоценима.
И это быстро. Очень быстро, даже на старом компьютере с не- SSD диска (я знаю, что они использовали , чтобы сделать этот жесткий диск с вращающимися дисками, называемыми тарелками , сумасшедшим правом?)
Это бесплатно.
Это портативный (простой ZIP-архив, чтобы распаковать).
Оригинальный ответ октябрь 2008
Гну Греп в порядке
Вы можете скачать его, например, здесь: ( сайт ftp )
Все обычные варианты здесь.
Это в сочетании с gawk и xargs (включая 'find', из GnuWin32 ), и вы действительно можете писать сценарии, как в Unix!
Смотрите также параметры, которые я использую для рекурсивного grep :
grep --include "*.xxx" -nRHI "my Text to grep" *
Командлет Select-String в PowerShell отлично работал в версии 1.0, но значительно лучше в версии 2.0 . Встроенная PowerShell в последние версии Windows означает, что ваши навыки здесь всегда будут полезны, без предварительной установки чего-либо.
Новые параметры, добавленные в Select-String : командлет Select-String теперь поддерживает новые параметры, такие как:
- -Контекст: это позволяет вам видеть линии до и после линии матча
- -AllMatches: которая позволяет вам видеть все совпадения в строке (ранее вы могли видеть только первое совпадение в строке)
- -NotMatch: эквивалентно grep -vo
- -Кодировка: указать кодировку
Я считаю , что целесообразно создать функцию gcir
для Get-ChildItem -Recurse .
, с умом , чтобы правильно передать параметры, а также псевдоним ss
для Select-String
. Итак, вы пишите
gcir * .txt | сс фу
ls . *.txt -r| sls -ca "SomeString"
sls
для Select-String
действительно слишком долго?
Возможно, он не совсем попадает в категорию «grep», но я не смог бы обойтись в Windows без утилиты под названием AgentRansack . Это основанная на графическом интерфейсе утилита «поиск в файлах» с поддержкой регулярных выражений. Это очень просто щелкнуть правой кнопкой мыши по папке, нажать «Ransack ...» и найти файлы, содержащие то, что вы ищете. Очень быстро тоже.
Прошло несколько лет с тех пор, как вы задали вопрос, но я бы порекомендовал AstroGrep ( http://astrogrep.sourceforge.net ).
Это бесплатно, с открытым исходным кодом, и имеет простой интерфейс. Я использую его для поиска кода все время.
PowerShell был упомянут несколько раз. Вот как вы могли бы использовать это по-гречески:
Get-ChildItem -recurse -include *.txt | Select-String -CaseSensitive "SomeString"
Он рекурсивно ищет все текстовые файлы в текущем дереве каталогов SomeString
с учетом регистра.
Еще лучше, запустите это:
function pgrep { param([string]$search, [string]$inc) Get-ChildItem -recurse -include $inc | Select-String -CaseSensitive $search }
Затем сделайте:
pgrep SomeStringToSearch *.txt
Затем, чтобы сделать его по-настоящему волшебным, добавьте псевдоним функции в свой профиль PowerShell, и вы почти приглушите боль, связанную с отсутствием соответствующих инструментов командной строки.
Cygwin включает в себя grep. Все инструменты GNU и Unix прекрасно работают в Windows, если вы установите Cygwin.
Git на Windows = grep в cmd.exe
Я только что узнал, что установка Git даст вам некоторые основные команды Linux: cat, grep, scp и все другие хорошие.
Установите, затем добавьте папку Git bin в вашу PATH, и тогда ваш cmd.exe имеет базовые функциональные возможности Linux!
dnGREP - это инструмент grep с открытым исходным кодом для Windows. Он поддерживает ряд интересных функций, в том числе:
ИМХО, у него тоже приятный и чистый интерфейс :)
Ну, кроме порта Windows GNU grep в:
http://gnuwin32.sourceforge.net/
есть также grep Borland (очень похожий на GNU), доступный в бесплатном бесплатном компиляторе Borland для C ++ (это бесплатное ПО с инструментами командной строки).
Я успешно использовал утилиты GNU для Win32 в течение достаточно долгого времени, и у нее есть хороший grep, а также tail и другие полезные утилиты gnu для win32. Я избегаю упакованной оболочки и просто использую исполняемые файлы прямо в командной строке win32.
Хвост, который упакован, является довольно хорошим небольшим приложением также.
Я автор Aba Search and Replace. Как и PowerGREP, он поддерживает регулярные выражения, сохраняя шаблоны для дальнейшего использования, отменяет замены, просматривает с подсветкой синтаксиса для HTML / CSS / JS / PHP, различными кодировками, включая UTF-8 и UTF-16.
По сравнению с PowerGREP, графический интерфейс менее загружен. Aba мгновенно начинает поиск, когда вы печатаете шаблон (инкрементальный поиск), поэтому вы можете экспериментировать с регулярными выражениями и сразу же видеть результаты.
Вы можете попробовать мой инструмент; Я буду рад ответить на любые вопросы.
Я хотел бесплатный инструмент grep для Windows, который позволял бы вам щелкать правой кнопкой мыши по папке и выполнять регулярный поиск по каждому файлу - без какого-либо всплывающего окна.
Ниже приведено быстрое решение на основе findstr
упомянутого в предыдущем посте.
Создайте текстовый файл где-нибудь на вашем жестком диске, где вы храните долгоживущие инструменты. Переименуйте в .bat или .cmd и вставьте в него следующее:
@echo off
set /p term="Search term> "
del %temp%\grepresult.txt
findstr /i /S /R /n /C:"%term%" "%~1\*.*" > "%temp%\grepresult.txt"
start notepad "%temp%\grepresult.txt"
Затем перейдите в папку SendTo. В Windows 7 найдите %APPDATA%\Microsoft\Windows\SendTo
и перетащите ярлык командного файла в эту папку SendTo.
Я переименовал ярлык, чтобы 1 GREP
сохранить его в верхней части списка SendTo.
Следующее, что я хотел бы сделать затем, это передать вывод findstr
через что-то, что сгенерирует html-файл, чтобы вы могли щелкнуть по каждой строке вывода, чтобы открыть этот файл. Кроме того, я не думаю, что это работает с ярлыками на папки. Я должен проверить параметр и посмотреть, содержит ли он «.lnk».
Я использовал grep Borland в течение многих лет, но только нашел образец, который не будет соответствовать. Eeeks. Что еще он не нашел за эти годы? Я написал простую замену текстового поиска, которая выполняет рекурсию, как grep - это FS.EXE в исходной кузнице.
grep не удается ...
C:\DEV>GREP GAAPRNTR \SOURCE\TPALIB\*.PRG
<no results>
windows findstr работает ...
C:\DEV>FINDSTR GAAPRNTR \SOURCE\TPALIB\*.PRG
\SOURCE\TPALIB\TPGAAUPD.PRG:ffSPOOL(cRPTFILE, MEM->GAAPRNTR, MEM->NETTYPE)
\SOURCE\TPALIB\TPPRINTR.PRG: AADD(mPRINTER, TPACONFG->GAAPRNTR)
\SOURCE\TPALIB\TPPRINTR.PRG: IF TRIM(TPACONFG->GAAPRNTR) <> TRIM(mPRINTER[2])
\SOURCE\TPALIB\TPPRINTR.PRG: REPLACE TPACONFG->GAAPRNTR WITH mPRINTER[2]
Мой инструмент выбора - Windows Grep с соответствующим названием :
Строка select в PowerShell похожа, она отличается от опций и семантики, но все же мощна.
Если вы хотите использовать простой инструмент Windows Grep, я создал инструмент под названием P-Grep, который я сделал доступным для бесплатной загрузки с моего сайта: www.adjutantit.com - домашнее меню, загрузки.
В Windows Grep, похоже, были проблемы с большим количеством файлов, поэтому я написал свой собственный, который кажется более надежным. Вы можете выбрать папку, щелкнуть правой кнопкой мыши и отправить ее в P-Grep. Папка sendto не обновляется во время установки.
Я использую AJC Grep ежедневно в течение многих лет. Единственное серьезное ограничение, которое я обнаружил, заключается в том, что пути к файлам ограничены 255 символами, и он останавливается, когда встречается, вместо того, чтобы просто выдавать предупреждение. Это раздражает, но случается не очень часто.
Я использую его на 64-битной Windows 7 Ultimate, поэтому его 64-битные учетные данные в порядке.
Я использовал его всегда, и, к счастью, он все еще доступен. Это супер быстро и очень мало.
Если ни одно из решений не совсем то, что вы ищете, возможно, вы могли бы написать обертку для FindStr, которая делает именно то, что вам нужно?
FindStr в любом случае довольно хорош, поэтому он должен просто вывести графический интерфейс (если вы этого хотите) и предоставить несколько дополнительных функций (например, объединить его с Find, чтобы найти количество файлов, которые содержат указанную строку [упомянуто выше]).
Это, конечно, предполагает, что у вас есть требование, время и желание сделать это!
Я установил Cygwin на мою машину и поместил каталог bin Cygwin в мой путь к среде, поэтому greg Cygwin работает как обычно в командной строке, что в настоящий момент решает все мои потребности в сценариях для grep.