Вопрос: Grep эквивалент для Windows 7?


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

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

ls | grep root

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


209
2018-06-22 20:51


Источник


не путайте ms-dos с командной строкой. + использование find и findstr и даже grep для windows .. безусловно, легко найти с быстрым поиском. есть даже таблицы эквивалентных команд в linux и windows. также вы, пример bash, даже не специфичны для bash .. просто я полагаю, * nix OS. - barlop


Ответы:


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

Другой пример с трубками:

C:\> dir /B | findstr /R /C:"[mp]"

252
2018-06-22 21:00



Да, похоже, это то, что я ищу. Я понимаю, что, вероятно, существуют ограничения. Я попробую. - chrisjlee
почему они не могли просто назвать это grep! - Victor Grazi
@VictorGrazi Они на самом деле делали сначала, смотри Эта статья, Первоначально он был назван qgrep - но позже был переименован. - Zitrax
Большая проблема с findstr заключается в том, что шаблон регулярного выражения не может содержать альтернативы. - Wolf
Вопрос касается Windows 7, но какие другие версии Windows имеют findstr по умолчанию? Начиная с Windows XP? - Peter Mortensen


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

  • Использовать порт Unix grep команда. Есть несколько вариантов. Часто упоминаемые gnuwin32, Cygwin, а также unxutils, Менее известные, но в некотором смысле более эффективные инструменты являются Инструментарий утилиты SFUA, которые выполняются в Подсистема для приложений на базе UNIX который поставляется прямо в коробке с версией Windows 7 Ultimate и Windows Server 2008 R2. (Для Windows XP можно скачать и установить Услуги для UNIX версии 3.5.) Этот набор инструментов содержит большое количество инструментов командной строки TUI, начиная с mv а также du, через оболочки Корна и С, 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, обратите внимание, как и функция регулярного выражения.

40
2018-06-23 13:06



cygwin отлично работал на Win 7. Мне нужен grep, и GnuWin32 grep не работал для меня. - Kozuch
Вы пишете, я не вижу perl в SUA C: \ Windows \ SUA> dir perl * / s / b Файл не найден и работает, например. c shell SUA Я не вижу его в / bin - barlop
вы также пишете, что SFUA в некотором смысле лучше. В каких случаях? - barlop
@Kozuch, если вы не указали, как это не сработало, тогда ваш комментарий не полезен - barlop


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

PS C:\> Get-ChildItem | Select-String root

или короткий

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"

17
2018-01-13 13:16



Греп, путь Powershell. communary.net/2014/11/10/grep-the-powershell-way - Charles Burge


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

В командной строке Windows NT (например, Win2K и Win XP, а затем, например, win7, win10), вы можете использовать find а также findstr и если вы загружаете GnuWin32 тогда grep 

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

C:\>dir | find "abc"
C:\>dir | find /i "abc"

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

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

добавленной

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


14
2018-06-22 21:00





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


9
2018-06-22 21:07



Это интересно, но потребуется установка этого инструмента. - chrisjlee
@ Крис: Нет установки. Это просто .zip файл .exe файлы. Единственным недостатком является то, что версии немного старые. - paradroid
Какой недостаток в том, чтобы быть старым? Может ли старое программное обеспечение? Все свежие байты. - user unknown
GnuWin32 также обеспечивает grep для Windows: gnuwin32.sourceforge.net/packages/grep.htm - LiuYan 刘研
@userunknown хорошо, в качестве примера команда unxutils sed старше и не поддерживает \ d e.g. \ d22, чтобы указать цитату. Более старый wget может не загружать страницу, которая будет более новой, и если вы попросите поддержки, они могут попросить вас получить последнюю версию, так как это может решить некоторые проблемы. У действительно старого grep, без сомнения, не будет уровня поддержки регулярных выражений, который имеет текущий - barlop


Вы можете попробовать установить шоколадным в Windows, и через это установите Гоу инструмент. Это предоставит вам grep в Windows.

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


3
2017-09-11 05:33



Это менеджер пакетов, как apt-get, но для окон. Он получил свое название «потому что разработчик основал его на NuGet, который является менеджером пакетов для визуальной студии, и это звучит как самородок (как у курятника), поэтому он подумал, что он будет« смешным »или« умным », и вызовет его программа Chocolatey NuGet. Я слышал это в подкасте, который брал у него интервью. Gow можно загрузить самостоятельно - barlop
Я новичок в Gow, после нескольких дней использования я могу засвидетельствовать, что мне это очень нравится - это лучше, чем все старые порты UNIX utils, которые я использовал раньше. - Radim Cernej
@RadimCernej ваш комментарий не полезен, если вы не заявите как вы думаете, что это лучше. - barlop
@barlop: Поскольку я написал комментарий от января-2016 года, я постепенно и полностью переключился на Gow. Пока нет ошибок, у него есть все утилиты, которые мне нужны / используются, путь выводятся в формате Microsoft (упрощение копирования / вставки в другие программы). Gow неинвазивный (простой в установке и удалении), который я настоятельно рекомендую вам протестировать. - Radim Cernej


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

$ ls | grep root

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

> dir /b | findstr root

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


2
2018-05-02 05:47



Это дублирует другой ответ и не добавляет нового контента. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового для участия. - DavidPostill♦
@DavidPostill: это быстрое решение для пользователей «TL; DR» (например, я) - vladkras
Это не оправдание для добавления ответа, который не вносит ничего нового. В любом случае принятый ответ всегда будет отображаться первым, поэтому он будет прочитан перед вашим. - DavidPostill♦
@DavidPostill, не против, но принятый ответ содержит несколько избыточных и необъяснимый ключи /B, /R а также /C ОП не спрашивал, в то время как мой ответ дает точный эквивалент - vladkras
/b состоит в том, чтобы сделать dir выводить то же, что и ls вывод. Если вы проверите это, вы увидите разницу. Так что это не точный эквивалент. - DavidPostill♦


Я написал альтернативу 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("You must provide search criteria.");
}

flagString=""
if(argCnt>1) {
    for(var bLoop=true; bLoop&&argDx<argCnt-1; argDx++) {
        switch(args(argDx)) {
        case '-t': replaceSingleQuotes=true; break;
        case '-o': printMatchesOnly=true; break;
        case '-g': flagString+="g"; break;
        case '-i': flagString+="i"; break;
        case '-m': flagString+="m"; break;
        default: bLoop=false; break;
        }
    }
}
if(replaceSingleQuotes) {
    matchString=args(argCnt-1).replace("'", '"');
} else {
    matchString=args(argCnt-1);
}

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

}

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


2
2018-03-03 11:06





http://www.multireplacer.com

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

MultiReplacer [Multi Replacer File] | [Search files] | [Search folders]
[-Subs] [-NoSubs] [-IncPtr=pattern] [-ExcPtr=patterns] [-DestDir=destination]
[-DMAnyTime]
[-DMWithinanhour] [-DMToday] [-DMYesterday] [-DMThisweek] [-DMThismonth]
[-DMThisYear]
[-CDMAfter=date] [-CDMBefore=date] [-MinFileSize=bytes count]
[-MaxFileSize=bytes count]
[-Search=text] [-Case] [-NoCase] [-Regex] [-NoRegex] [-SubMatchText=text]
[-ReplaceText=text]
[-StartSearch] [-StartReplace] [-AutoClose] [-StopAfterMatchThisFile] [-StopAfterMatchAll]
[-ExtractedWordsFile=filename] [-ExtractedLinesFile=filename] [-
ReportFile=filename]

1
2018-02-08 22:15





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


0
2017-09-03 02:48



unxutils grep не так поздно, как вы можете получить .. unx grep is 2.4.2 но gnuwin32 имеет более поздний 2.5.4 - barlop