web-dev-qa-db-ja.com

Windows 7と同等のGrep?

Windows 7と同等のコマンドPrompt grep はありますか?つまり、コマンドの結果を除外したいのです。

バッシュ使用:

ls | grep root

Windowsのコマンドプロンプトからはどうなるでしょうか。

233
chrisjlee

Findstr はあなたが望むもののように聞こえます。私はこれをWindowsプラットフォーム上のgrep相当のものとしていつも使っています。

パイプを使った別の例

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

いくつかの可能性があります。

  • Unix grepコマンドのポートを使用します。いくつかの選択肢があります。多くの場合、 GNUWin32cygwin 、および nxutils です。あまり知られていませんが、いくつかの点で優れているのは、 SFUAユーティリティツールキット のツールです。これは、すぐに使用できる NIXベースアプリケーション用サブシステム で実行されますWindows 7 UltimateエディションおよびWindows Server 2008 R2。 (Windows XPの場合、 ダウンロード およびインストール NIXバージョン3.5のサービス を使用できます。)このツールキットには、mvからの多数のコマンドラインTUIツールがあります。およびduは、KornおよびCシェルを介して、Perlおよびawkに移動します。 x86-64とIA64の両方のフレーバーとx86-32があります。これらのプログラムは、エミュレータDLL(cygwin1.dllなど)を使用してWin32上に階層化するのではなく、Windowsのネイティブの適切なPOSIX環境で実行されます。そして、はい、ツールキットにはgrepの他に約300があります。
  • 多くのネイティブWin32 grepコマンドの1つを使用して、人々が書いて公開しています。Tim Charronには ネイティブWin32バージョンの変更されたGNU grep など。 PowerGREPBare GrepgrepWinAstroGrep 、および dnGrep 、これらはすべてTUIプログラムではなくGUIプログラムです。
  • 指定されたfindおよびfindstrを使用します。構文はgrepとは異なります。正規表現機能。
44
JdeBP

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"
18
oleschri

MS-DOSを書いたあなたの初期の改訂版では、私の知る限りではFINDだけがあります。しかしそれはもう使われていない古代のOSです。

Windows NTのコマンドプロンプト(Win2Kやwin XP以降など、つまりwin7、win10など)では、findfindstrを使用でき、 GnuWin32 をダウンロードする場合それからgrep

基本的な違いは、findstrが 正規表現 をサポートしていることです。 Grepは正規表現を最もよくサポートしています。

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

find /?findstr /?は、スイッチが何をするのかを示します。

Gnuwin32 には "packages"があります。 GnuWin32をダウンロードするなら、私はあなたが精通しているであろう基本的な有用なユーティリティの束のためのcoreutilsパッケージを提案します、しかしgrepはそれ自身のパッケージにはありません。

追加

前回チェックしたGnuWin32のgrepは古くなっています。 Cygwinのgrepははるかに最新のものです。また、多くの人が* nixコマンドのWindowsポートではなく仮想マシンを使用していることにも注意してください。

16
barlop

grepではなくfindstrを使用する場合は、 UnxUtils に単一の.exeファイルバージョンがあるため、移植性があり、インストールする必要はありません。あるいは、Cygwinのようなものを使う。

9
paradroid

Windowsに Chocolatey をインストールし、それを介して Gow ツールをインストールすることができます。これはWindows上でgrepを提供します。

Gowは、WindowsではGNUを表します。 Windows上でUnixのコマンドラインユーティリティを提供します。

3
Atur

バッシュ使用

$ ls | grep root

コマンド使用

> dir /b | findstr root

ここで、/bbはディレクトリとファイルのリストです。

2
vladkras

私は、Hybrid Batch/JScriptコードを使用してgrepの代わりにWindowsを作成しました。これを書いたのは、GNU Win32 grepポートでエスケープ文字を正しく入力するのは大変な作業だったからです。このバージョンは、WindowsでGNUバージョンを動作させる方法と同じように機能します。

@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
krowe

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
user298490

あなたのウィンドウズ環境に最も単純なgrepを追加したいならば、それからc:\windows\system32にナビゲートして、そしてこのコマンドを使用することによって小さなバッチスクリプトを追加してください:

echo findstr %1 > grep.bat

今すぐすることができます

dir | grep notepad.exe

これは本当にたわごとの怖いミックスです。それで、この ポストで説明されているようにlsのための別のバッチスクリプトを追加してください

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

今、物事は少しおなじみのように見えます

ls | grep notepad

HTH

0
domih

私は busybox-w32 を使うことをお勧めします。

だからあなたの場合は、コマンドプロンプトで、それはそれです:

busybox ls | busybox grep root

次のように、コマンドでdoskeyを使用してコマンドを作成することができます。

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

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

その後、プロンプトでls | grep rootを使用できます。

0
kissson

このツールをダウンロードする UnxUtils して、あなたのgrep環境変数にその場所を追加することで、あなたは今でもおなじみのPATHや他のLinuxコマンドを使うことができます。

0
thucnguyen