Windows 7に相当するGrep?


241

Windows 7に相当するコマンドプロンプトgrepはありますか?つまり、コマンドの結果を除外したいのです。

Bashの使用:

ls | grep root

Windowsコマンドプロンプトからはどうなりますか?


9
ms-dosとコマンドプロンプトを混同しないでください。+ Windowsの場合、findとfindstr、さらにgrepの使用は、クイック検索で簡単に見つかります。LinuxおよびWindowsには同等のコマンドの表もあります。また、bashの例はbashに固有ではありません。ただ、* nix OSと思います。
barlop

回答:


280

Findstrは、あなたが望むもののように聞こえます。私は常に、Windowsプラットフォームでのおおよそのgrepと同等のものとして使用しています。

パイプの別の例

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

ええ、それは私が探しているもののようです。おそらく制限があることを理解しています。試してみます。
chrisjlee

18
なぜ彼らは単にgrepと呼べないのでしょう!
ビクターグラツィ

6
@VictorGrazi彼らは最初は実際にやりました。この記事を参照してください。元々はqgrepという名前でしたが、後に名前が変更されました。
Zitrax

3
の大きな問題findstrは、正規表現パターンに代替が含まれない可能性があることです。
ウルフ

問題はWindows 7についてですが、Windowsの他のバージョンにはfindstrデフォルトでどのようなバージョンがありますか?Windows XP以降ですか?
ピーターモーテンセン

44

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


cygwinはWin 7でうまく機能しました。grepが必要でしたが、GnuWin32 grepは機能しませんでした。
コズチ14

あなたは、私がSUA CにPerlを見ない書きます。dirのperl * / S / Bファイルが見つかりません> \ WINDOWS \ SUAとSUAの例えばCシェルを実行している私は、/ binにそれを見ることはありません
barlop

また、SFUAはいくつかの点で優れていると書いています。どんな風に?
-barlop

@Kozuchあなたがそれがうまくいかなかった方法を述べない限り、あなたのコメントは役に立たない
-barlop

19

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

あなたの初期の改訂版でMS-DOSを書いたのはFIND、私が知る限り、のみです。しかし、もはや使用されていない古代のOSです。

Windows NTのコマンドプロンプトで(例えばのWin2Kと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ははるかに最新です。また、多くの人が* nixコマンドのWindowsポートではなく仮想マシンを使用していることにも留意してください。


9

あなたはむしろ使用する場合はgrep、ではなくfindstr、そこに単一で.exeのファイルバージョンUnxUtilsは、それはポータブルだし、それをインストールするか、Cygwinのようなものを使用する必要はありません。


これは興味深いですが、そのツールをインストールする必要があります。
chrisjlee

3
@クリス:インストールはありません。これは単なる.zipファイルの.exeファイルです。唯一の小さな欠点は、バージョンが少し古いことです。
パラドロイド

6
古いことのマイナス面は何ですか?ソフトウェアは古いものにできますか?すべての新鮮なバイト。
ユーザー不明

3
GnuWin32はgrepWindows用にも提供しています:gnuwin32.sourceforge.net/packages/grep.htm
LiuYan刘研

3
@userunknown、例として、unxutils sedコマンドは古く、引用符を指定するための\ d22をサポートしていません。古いwgetは、新しいwgetがダウンロードするページをダウンロードしない可能性があります。サポートを求める場合、いくつかの問題を解決できるため、最新のページを入手するよう求められることがあります。間違いなく、現在の1が持っている正規表現サポートのレベルを持っていないだろう本当に古いグレップ
barlop

3

ChocolateyをWindowsにインストールして、Gowツールをインストールしてみてください。これによりgrep、Windows が提供されます。

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


1
これは、apt-getに似ていますが、Windows用のパッケージマネージャーです。その名前は、開発者がVisual StudioのパッケージマネージャーであるNuGetに基づいているため、ナゲット(チキンナゲットのように)のように聞こえるので、彼は「おかしい」または「賢い」と思って呼び出します彼のプログラムChocolatey NuGet。彼にインタビューしたポッドキャストでそれを聞いた。Gowも個別にダウンロードできます
-barlop

1
私はGowを初めて使用します。数日間使用した後、私はそれがとても気に入っていることを証明できます。以前使用していたUNIXユーティリティのすべての古いポートよりも優れています。
Radim Cernej

@RadimCernejあなたのコメントは、あなたがより良いと思う方法を述べない限り、役に立ちません。
-barlop

@barlop:2016年1月のコメントを書いてから、徐々に完全にGowに切り替えました。これまでのところバグはなく、必要な/使用するすべてのユーティリティがあり、パスはMicrosoft形式で出力されます(他のプログラムへのコピー/貼り付けが簡単になります)。Gowは十分に非侵襲的(インストールと削除が簡単)なので、試運転することを強くお勧めします。
Radim Cernej

2

バッシュの使用

$ ls | grep root

Cmdの使用

> dir /b | findstr root

どこ/bの略で、Bのディレクトリとファイルのリストがあります


2
これにより別の回答が複製され、新しいコンテンツは追加されません。実際に何か貢献できるものがない限り、回答を投稿しないでください。
DavidPostill

@DavidPostill:これがために高速なソリューションである「TL; DR」(私のような)ユーザー
vladkras

それは、新しいことに何も貢献しない答えを追加する言い訳にはなりません。いずれにしても、受け入れられた答えは常に最初に表示されるので、あなたの前に読まれます。
DavidPostill

@DavidPostill、気にしないが、受け入れ答え、複数の過大と含まれている原因不明のキーを/B/Rそして/C私の答えは与えながらOPは、について質問していない正確な同等のものを
vladkras

これ/bは、dir出力を出力と同じにすることlsです。テストすると、違いがわかります。したがって、完全に同等ではありません。
DavidPostill

2

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);
        }
    }

}

これについては、Gistページで常に最新バージョンを見つけることができます。


1

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

grepこのツールUnxUtilsをダウンロードして場所をPATH環境変数に追加することにより、使い慣れたコマンドや他のLinuxコマンドを引き続き使用できます。


grepのが遅けれあなたが得ることができるようにではありませんunxutils .. UNXのgrepがある2.4.2が、後1 gnuwin32あり 2.5.4
barlop

0

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、コマンドプロンプトで使用できます。


Androidビルドもあります
-barlop

0

grepWindows環境に最も単純なものを追加する場合は、次のc:\windows\system32コマンドを使用して、小さなバッチスクリプトに移動して追加します。

echo findstr %1 > grep.bat

今、あなたはできる

dir | grep notepad.exe

これは本当に恐ろしい組み合わせです。lsこの投稿で説明されているように、別のバッチスクリプトを追加します

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

今では物事は少し馴染みがあります

ls | grep notepad

HTH


-2
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

ところで、この退屈な答えには、有名なロシアの開発
vladkras
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.