題 相當於Windows 7的Grep?


是否有命令提示符 grep的 相當於Windows 7?也就是說,我想過濾掉命令的結果:

Bash使用:

ls | grep root

Windows命令提示符會是什麼?


215
2018-06-22 20:51


起源


不要將ms-dos與命令提示符混淆。 +使用find和findstr甚至grep,用於Windows ..通過快速搜索肯定很容易找到。在linux和windows中甚至有等效命令表。另外你bash示例甚至不特定於bash ..只是我想,* nix OS。 - barlop


答案:


FINDSTR 聽起來像你想要的。我一直將它用作Windows平台上的近似grep等效項。

另一個例子 帶管道:

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

256
2018-06-22 21:00



是的,這似乎是我正在尋找的。我知道可能存在局限性。我試一試。 - chrisjlee
為什麼他們不能稱之為grep! - Victor Grazi
@VictorGrazi他們實際上一開始就看到了 本文。它最初被命名為qgrep - 但後來被重命名。 - Zitrax
最大的問題 findstr 是正則表達式模式可能不包含替代品。 - Wolf
問題是關於Windows 7,但其他版本的Windows有什麼 findstr 默認情況下? 自Windows XP以來? - Peter Mortensen


有幾種可能性:

  • 使用Unix的端口 grep 命令。 有幾種選擇。提到的是 的GnuWin32cygwin的,和 unxutils。鮮為人知,但在某些方面更好,是工具 SFUA實用工具包,運行在 基於UNIX的應用程序的子系統 在Windows 7旗艦版和Windows Server 2008 R2的包裝盒中出現。 (對於Windows XP,可以 下載 並安裝 適用於UNIX 3.5的服務。)這個工具包有大量的命令行TUI工具,來自 mv 和 du,通過Korn和C貝殼,到 perl 和 awk。它有x86-64和IA64兩種口味以及x86-32。這些程序在Windows本地正確的POSIX環境中運行,而不是在模擬器DLL(例如 cygwin1.dll在Win32上分層。是的,工具包有 grep,以及其他約300人。
  • 使用眾多原生Win32之一 grep 人們編寫和發布的命令。  蒂姆查倫有 修改後的GNU grep的本機Win32版本, 例如。還有 PowerGREPBare GrepgrepWinAstroGrep,和 dnGrep,雖然這些都是GUI程序而不是TUI程序。
  • 使用提供的 find 和 findstr  語法與。的語法不同 grep,注意,正則表達式功能也是如此。

41
2018-06-23 13:06



cygwin很好地為Win 7工作。我需要grep和GnuWin32 grep對我不起作用。 - Kozuch
你寫的我在SUA C中看不到perl:\ Windows \ SUA> dir perl * / s / b File Not Found and running例如SU的SU shell我在/ bin中看不到它 - barlop
你還寫道,SFUA在某些方面更好。以什麼方式? - barlop
@Kozuch,除非你說明它不起作用,那麼你的評論是沒有用的 - barlop


如果 電源外殼 命令是允許的,使用

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

或短

PS C:\> ls | sls root

請注意別名 sls 僅從PowerShell 3.0版開始定義。您可以為較少的輸入添加別名:

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

要直接從cmd運行PowerShell命令,請使用

C:\>powershell -command "ls | select-string root"

17
2018-01-13 13:16



Grep,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的grep,我上次檢查時,已經老了。 Cygwin的grep更新了。還要記住,許多人使用虛擬機而不是* nix命令的Windows端口。


15
2018-06-22 21:00





如果你願意使用 grep, 而不是 findstr,有一個 .exe 文件版本 UnxUtils,所以它是便攜式的,不需要安裝它,或使用像Cygwin這樣的東西。


9
2018-06-22 21:07



這很有趣,但需要安裝該工具。 - chrisjlee
@Chris:沒有安裝。這只是一個 .zip 的文件 .exe 文件。唯一的小缺點是版本略顯陳舊。 - paradroid
變老的缺點是什麼?軟件可以老嗎?所有新鮮字節。 - user unknown
GnuWin32還提供 grep 對於Windows: gnuwin32.sourceforge.net/packages/grep.htm - LiuYan 刘研
@userunknown,作為一個例子,unxutils sed命令較舊,不支持\ d,例如\ d22指定報價。較舊的wget可能無法下載較新的頁面,如果您要求支持,他們可能會要求您獲取最新的頁面,因為這可以解決一些問題。毫無疑問,一個非常古老的grep將不具備當前版本所具有的正則表達式支持水平 - barlop


你可以嘗試安裝 巧克力味 在Windows上,通過它,安裝 牌九 工具。這將為您提供 grep 在Windows上。

Gow 代表Windows上的GNU。它在Windows上提供Unix命令行實用程序。


3
2017-09-11 05:33



它是一個包管理器,就像apt-get但是對於windows。它的名字是'cos開發人員基於NuGet,它是視覺工作室的包管理器,聽起來像金塊(如雞塊),所以他認為他是“有趣”或“聰明”並且打電話他的節目Chocolatey NuGet。我在接受采訪的播客上聽說過。 Gow也可以單獨下載 - barlop
我是Gow的新手,經過幾天的使用,我可以證明我非常喜歡它 - 它比我以前用過的所有舊的UNIX工具端口都要好。 - Radim Cernej
@RadimCernej你的評論沒有用,除非你聲明 怎麼樣 你認為它更好。 - barlop
@barlop:自從我寫了2016年1月的評論後,我逐漸完全轉向Gow。到目前為止沒有錯誤,它具有我需要/使用的所有實用程序,路徑以Microsoft格式輸出(使其易於復制/粘貼到其他程序)。 Gow是非侵入性的(易於安裝和移除),我強烈建議您試駕它。 - Radim Cernej


Bash使用

$ ls | grep root

使用Cmd

> dir /b | findstr root

哪裡 /b 代表 b是目錄和文件的列表


2
2018-05-02 05:47



這複製了另一個答案,並沒有添加任何新內容。請不要發布答案,除非您確實有新的貢獻。 - DavidPostill♦
@DavidPostill:這是“TL; DR”用戶的快速解決方案(像我一樣) - vladkras
這不是添加沒有任何新內容的答案的藉口。在任何情況下,接受的答案將始終首先出現,以便在您的答案之前閱讀。 - DavidPostill♦
@DavidPostill,不介意,但接受的答案包含多個過多和 原因不明 按鍵 /B, /R 和 /C OP沒有詢問,而我的答案給出了 精確 當量 - vladkras
該 /b 就是要做 dir 輸出與。相同 ls 輸出。如果你測試它,你會看到差異。所以它不是完全相同的。 - DavidPostill♦


我使用Hybrid Batch / JScript代碼編寫了一個替代grep的Windows替代品。我寫這個是因為在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