2011-06-22 20:51:57 +0000 2011-06-22 20:51:57 +0000
246
246
Advertisement

Grep相当于Windows 7?

Advertisement

有没有一个Windows 7的命令提示符 grep 等价物?就是说,我想过滤掉一个命令的结果。

Bash使用:

ls | grep root

Windows命令提示符会是什么?

Advertisement
Advertisement

答案 (13)

287
287
287
2011-06-22 21:00:56 +0000
45
45
45
2011-06-23 13:06:17 +0000

有几种可能:

  • ***使用 Unix grep 命令的端口。经常提到的有 GNUWin32 , cygwin , 和 unxutils 。比较少有人知道,但在某些方面比较好的是SFUA 工具包中的工具,它们运行在基于UNIX的应用程序子系统中,Windows 7终极版和Windows Server 2008 R2的盒子里。对于Windows XP,可以下载并安装Services for UNIX 3.5版。这个工具包有大量的命令行TUI工具,从mvdu,通过Korn和C shells,到perlawk。它有x86-64和IA64两种版本,也有x86-32版本。程序运行在Windows原生的POSIX环境中,而不是用仿真器DLLs(如cygwin1.dll)在Win32上分层。是的,工具箱里有grep,还有其他300多个命令。
  • ***使用人们编写和发布的许多原生Win32 grep命令之一。还有 PowerGREP, Bare Grep, grepWin, AstroGrep, 和 dnGrep, 尽管这些都是GUI程序,而不是TUI程序。
19
Advertisement
19
19
2014-01-13 13:16:43 +0000
Advertisement

如果允许使用PowerShell命令,请使用

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"
18
18
18
2011-06-22 21:00:57 +0000

在你早期的版本中,据我所知,你写的MS-DOS只有FIND。但它是一个古老的操作系统,现在已经不用了。

在Windows NT命令提示符中(如Win2K和win XP及以后的版本,所以如win7,win10),你可以使用findfindstr,如果你下载了GnuWin32,那么grep

基本的区别是findstr有一些正则表达式的支持。Grep最支持正则表达式。

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

find /?findstr /?告诉你开关的作用, Gnuwin32 有 “包"。如果你下载了GnuWin32,我建议你在coreutils包里下载一堆你会熟悉的基本实用工具,但grep不在那个包里,它是自己的包。


GnuWin32的grep,上次我查过,是旧的。Cygwin的grep是最新的。另外,请记住,很多人使用虚拟机而不是windows端口的*nix命令。

9
Advertisement
9
9
2011-06-22 21:07:43 +0000
Advertisement

如果你愿意使用grep,而不是findstr,在UnxUtils里有一个单独的.exe文件版本,所以它是可移植的,不需要安装,也不需要使用类似Cygwin的东西。

3
3
3
2014-09-11 05:33:28 +0000

你可以尝试在Windows上安装Chocolatey,然后通过安装Gow工具。

grep代表GNU on Windows。它在 Windows 上提供了 Unix 命令行工具。

2
Advertisement
2
2
2016-05-02 05:47:50 +0000
Advertisement

Bash使用

$ ls | grep root

Cmd使用

> dir /b | findstr root

,其中b代表目录和文件列表

2
2
2
2015-03-03 11:06:06 +0000

我用混合批处理/JScript代码写了一个Windows中的GREP替代方案。我写这段代码是因为在GNU Win32 grep port中,要想在GNU Win32 grep port中得到正确的转义字符是一件非常痛苦的事情。这个版本的工作方式更像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);
        }
    }

}
``` &001 


你可以在我的[Gist](https://gist.github.com/krowe/da2a6b021ac891f8e3be)页面上找到最新的版本。
1
Advertisement
1
1
2014-02-08 22:15:42 +0000
Advertisement

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]
0
0
0
2016-06-12 12:31:27 +0000

我建议使用 busybox-w32 ,因为它的大小只有500 KB左右,而且是主动维护的,所以在你的情况下,在命令提示符中是:

busybox ls | busybox grep root

你可以在命令提示符中用doskey通过批处理文件启动的命令,如:

doskey ls="path\to\busybox.exe" ls $*

doskey grep="path\to\busybox.exe" grep $*

然后在命令提示符中使用ls | grep root

0
0
0
2017-07-04 08:34:21 +0000

如果你想把最简单的grep添加到你的windows环境中,那么导航到c:\windows\system32,然后用这个命令添加一个小小的批处理脚本:

echo findstr %1 > grep.bat

现在你可以 dir | grep notepad.exe

,这真的是一个很吓人的混账东西。所以按照这篇[帖子]中的解释,为ls添加另一个批处理脚本(https://stackoverflow.com/a/15043472/1037303)

echo dir %1 > %systemroot%\system32\ls.bat
ls | grep notepad

现在看起来有点眼熟了

&001

HTH

0
0
0
2014-09-03 02:48:08 +0000

你仍然可以通过下载这个工具UnxUtils来使用你熟悉的grep和其他Linux命令,并将其位置添加到你的PATH环境变量中。

-2
-2
-2
2016-03-25 08:35:24 +0000
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd

那会是又快又脏的等价物

C:\Windows\system32>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
Advertisement

相关问题

3
28
13
7
6
Advertisement
Advertisement