Grep эквивалент для Windows 7?

Есть ли командная строка эквивалент grep для Windows 7? То есть, я хочу отфильтровать результаты команды:

Использование Bash:

ls | grep root

Что из командной строки Windows?

208 голосов | спросил chrisjlee 23 J0000006Europe/Moscow 2011, 00:51:57

13 ответов


252

Findstr звучит так, как вы хотите. Я использую его все время как приблизительный grep-эквивалент на платформе Windows.

Другой пример с каналами:

  C: \ & GT; dir /B | findstr /R /C: "[mp]"
 
ответил Greg Jackson 23 J0000006Europe/Moscow 2011, 01:00:56
40

Существует несколько возможностей:

  • Использовать порт команды Unix grep . Есть несколько вариантов. Описанными являются GNUWin32 , cygwin и unxutils . Менее известные, но в некотором смысле более эффективные инструменты - это инструменты SFUA toolkit , которые выполняются в Подсистема для UNIX-приложений , которая подходит там в коробке с версией Windows 7 Ultimate и Windows Server 2008 R2. (Для Windows XP можно скачать и установите Сервисы для UNIX версии 3.5 .) В этом наборе инструментов есть большое количество инструментов командной строки из командной строки: от mv и du , через оболочки Korn и C, perl и awk . Он подходит как для x86-64, так и для IA64, а также для x86-32. Программы выполняются в собственной собственной среде POSIX Windows, а не с DLL-эмуляторами (например, cygwin1.dll ), которые лежат в основе Win32. И да, набор инструментов имеет grep , а также около 300 других.
  • Используйте одну из многих встроенных команд Win32 grep , которые люди написали и опубликовали. Тим Шаррон имеет родная версия Win32 модифицированного GNU grep , например. Есть также PowerGREP , Bare Grep , grepWin , AstroGrep и dnGrep , хотя это все программы GUI, а не программы TUI.
  • Используйте прилагаемый find и findstr . . Синтаксис отличается от синтаксиса grep , обратите внимание, как и обычный возможности выражения.
ответил JdeBP 23 J0000006Europe/Moscow 2011, 17:06:17
17

Если допустимы команды PowerShell , используйте

  PS C: \> Get-ChildItem | Выбрать-Строковый корень
 

или короткий

  PS C: \> ls | sls root
 

Помните, что псевдоним sls определен только начиная с версии PowerShell версии 3.0. Вы можете добавить псевдоним для меньшего набора текста:

  PS C: \> New-Alias ​​sls Select-String
 

Чтобы запустить команду PowerShell непосредственно из cmd, используйте

  C: \> powershell -command "ls | select-string root"
 
ответил oleschri 13 Jpm1000000pmMon, 13 Jan 2014 17:16:43 +040014 2014, 17:16:43
14

В вашей ранней редакции вы написали MS-DOS, есть только FIND , насколько я знаю. Но это древняя ОС, которая больше не используется.

В командной строке Windows NT (например, Win2K и Win XP, а затем, например, win7, win10), вы можете использовать find и findstr , а если вы загрузите < a href = "http://gnuwin32.sourceforge.net/" rel = "nofollow noreferrer"> GnuWin32 , затем grep

Основные отличия заключаются в том, что findstr имеет регулярные выражения . Grep лучше всего поддерживает регулярные выражения.

  C: \> dir | найти "abc"
C: \> dir | find /i "abc"
 

find /? и findstr /? показывает вам, что делают переключатели.

Gnuwin32 имеет «пакеты». Если вы загружаете GnuWin32, я предлагаю пакет coreutils для кучи основных полезных утилит, с которыми вы были бы знакомы, но grep не в том, что это его собственный пакет.

<сильный> Добавлен

GnuWin32's grep, последний раз, когда я проверил, старый. Grep Cygwin намного более современен. Также имейте в виду, что многие люди используют виртуальные машины, а не порты Windows для команд * nix.

ответил barlop 23 J0000006Europe/Moscow 2011, 01:00:57
9

Если вы предпочитаете использовать grep , а не findstr , существует одна версия файла .exe в UnxUtils , поэтому он переносимый и его не нужно устанавливать, или использовать что-то вроде Cygwin.

ответил paradroid 23 J0000006Europe/Moscow 2011, 01:07:43
3

Вы можете попробовать установить Chocolatey в Windows и через это установить инструмент Gow . Это предоставит вам grep в Windows.

Gow обозначает GNU в Windows. Он предоставляет утилит командной строки Unix в Windows.

ответил atur 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 11 Sep 2014 09:33:28 +0400 2014, 09:33:28
2

Использовать Bash

  $ ls | grep root
 

Использование Cmd

  & GT; dir /b | findstr root
 

где /b обозначает b - список каталогов и файлов

ответил vladkras 2 Mayam16 2016, 08:47:50
2

Я написал альтернативу grep для grep с использованием кода Hybrid Batch /JScript. Я написал это, потому что получение escape-символов прямо в порту GNU Win32 grep было настоящей болью. Эта версия гораздо больше похожа на то, как вы хотите, чтобы версия GNU работала в Windows:

  @set @ junk = 1 /*
@cscript //nologo //E: jscript% ~ f0% *
@goto: eof * /

var args = WScript.Arguments, argCnt = args.Length, stdin = WScript.StdIn, stdout = WScript.StdOut;
var replaceSingleQuotes = false, printMatchesOnly = false, matchString, flagString, regex, argDx = 0;

if (argCnt == 0) {
    throw new Error («Вы должны указать критерии поиска»);
}

flagString = ""
if (argCnt> 1) {
    for (var bLoop = true; bLoop & amp; argDx <argCnt-1; argDx ++) {
        switch (args (argDx)) {
        case '-t': replaceSingleQuotes = true; ломать;
        case '-o': printMatchesOnly = true; ломать;
        case '-g': flagString + = "g"; ломать;
        case '-i': flagString + = "i"; ломать;
        case '-m': flagString + = "m"; ломать;
        default: bLoop = false; ломать;
        }
    }
}
if (replaceSingleQuotes) {
    matchString = args (argCnt-1) .replace ("'",' '');
} else {
    MatchString = арг (argCnt-1);
}

if (printMatchesOnly) {
    while (! stdin.AtEndOfStream) {
        var sLine = stdin.ReadLine ();
        if (flagString.Length) regex = новый RegExp (matchString, flagString);
        else regex = новый RegExp (matchString);
        var m, matches = [], startDx = 0;
        while ((m = regex.exec (sLine.substr (startDx)))! == null) {
            stdout.WriteLine (м [0]);
            startDx + = m.lastIndex;
        }
    }
} else {
    if (flagString.Length) regex = новый RegExp (matchString, flagString);
    else regex = новый RegExp (matchString);
    while (! stdin.AtEndOfStream) {
        var sLine = stdin.ReadLine ();
        if (regex.test (sLine)) {
            stdout.WriteLine (Sline);
        }
    }

}
 

Вы всегда можете найти последнюю версию на странице Gist для этого.

ответил krowe 3 MarpmTue, 03 Mar 2015 14:06:06 +03002015-03-03T14:06:06+03:0002 2015, 14:06:06
1

http://www.multireplacer.com

Программа многозадачности была подготовлена ​​так, что многие функции могут быть выполнены с использованием параметры командной строки. Использование командной строки приведено ниже:

  MultiReplacer [Файл многозадачности] | [Поиск файлов] | [Поиск папок]
[-Subs] [-NoSubs] [-IncPtr = pattern] [-ExcPtr = patterns] [-DestDir = destination]
[-DMAnyTime]
[-DMWithinanhour] [-DMToday] [-DMYesterday] [-DMThisweek] [-DMThismonth]
[-DMThisYear]
[-CDMAfter = date] [-CDMBefore = date] [-MinFileSize = количество байтов]
[-MaxFileSize = количество байтов]
[-Search = текст] [-Case] ​​[-NoCase] ​​[-Regex] [-NoRegex] [-SubMatchText = текст]
[-ReplaceText = текст]
[-StartSearch] [-StartReplace] [-AutoClose] [-StopAfterMatchThisFile] [-StopAfterMatchAll]
[-ExtractedWordsFile = имя_файла] [-ExtractedLinesFile = имя_файла] [-
ReportFile = имя файла]
 
ответил user298490 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 02:15:42 +0400000000amSun, 09 Feb 2014 02:15:42 +040014 2014, 02:15:42
0

Вы можете использовать свой знакомый grep и другие команды Linux, загрузив этот инструмент UnxUtils и добавьте его в свою переменную окружения PATH

ответил thucnguyen 3 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 03 Sep 2014 06:48:08 +0400 2014, 06:48:08
0

Я бы предложил использовать busybox-w32 , так как он имеет размер около 500 КБ и активно поддерживается .

Итак, в вашем случае в командной строке это:

  busybox ls | BusyBox корень Grep
 

Вы можете использовать doskey в командной строке запуска командного файла для создания команды, например:

  doskey ls = "путь \ to \ busybox.exe" ls $ *

doskey grep = "путь \ to \ busybox.exe" grep $ *
 

Затем вы можете использовать ls | grep root в командной строке.

ответил kissson 12 J0000006Europe/Moscow 2016, 15:31:27
0

Если вы хотите добавить простейший grep в среду Windows, перейдите к c: \ windows \ system32 и добавьте небольшой пакетный скрипт с помощью этой команды:

  echo findstr% 1> grep.bat
 

Теперь вы можете

  dir | grep notepad.exe
 

, что действительно страшное сочетание дерьма. Поэтому добавьте еще один пакетный скрипт для ls , как описано в этом сообщении

  echo dir% 1> % SystemRoot% \ system32 \ ls.bat
 

Теперь все выглядит немного знакомо

  ls | Блокнот grep
 

НТН

ответил domih 4 J000000Tuesday17 2017, 11:34:21
-2
  echo findstr% 1% 2% 3% 4% 5> % SystemRoot% \ grep.cmd
 

Это будет быстрый и грязный эквивалент.

  C: \ Windows \ system32 gt; dir | grep xwiz
C: \ Windows \ system32> findstr xwiz
2009.06.10 23:03 4.041 xwizard.dtd
2009.07.14 03:39 42.496 xwizard.exe
2009.07.14 03:41 432.640 xwizards.dll
 
ответил Superguest 25 MaramFri, 25 Mar 2016 11:35:24 +03002016-03-25T11:35:24+03:0011 2016, 11:35:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132