回答:
Findstrは、あなたが望むもののように聞こえます。私は常に、Windowsプラットフォームでのおおよそのgrepと同等のものとして使用しています。
パイプの別の例:
C:\> dir /B | findstr /R /C:"[mp]"
findstr
は、正規表現パターンに代替が含まれない可能性があることです。
findstr
デフォルトでどのようなバージョンがありますか?Windows XP以降ですか?
いくつかの可能性があります。
grep
コマンドのポートを使用します。いくつかの選択肢があります。よく言及されるのはGNUWin32、cygwin、およびunxutilsです。あまり知られていませんが、いくつかの点では優れていますが、SFUAユーティリティツールキットのツールは、Windows 7 UltimateエディションとWindows Server 2008 R2が同梱されているUNIXベースアプリケーション用サブシステムで実行されます。(Windows XPの場合、1が可能ダウンロードしてインストールサービスをUNIXバージョン3.5のため。)このツールキットは、コマンドラインTUIツールの数が多いからmv
とdu
し、KornシェルとCシェルを通じて、perl
およびawk
。x86-64とIA64の両方のフレーバーとx86-32があります。これらのプログラムは、cygwin1.dll
Win32上に物事を重ねるエミュレータDLL(など)ではなく、Windowsのネイティブの適切なPOSIX環境で実行されます。そして、はい、ツールキットにはがgrep
あり、他にも約300があります。grep
人々が書いて公開した多くのネイティブWin32 コマンドの1つを使用します。 Tim Charronには、たとえば、変更されたGNU grepのネイティブWin32バージョンがあります。ありますPowerGREP、ベアをGrep、grepWin、AstroGrep、およびdnGrepは、これらは、すべてのGUIプログラムではないTUIプログラムですが、。find
とを使用しfindstr
ます。 構文はgrep
、正規表現機能と同様、注の構文とは異なります。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"
あなたの初期の改訂版でMS-DOSを書いたのはFIND
、私が知る限り、のみです。しかし、もはや使用されていない古代のOSです。
Windows NTのコマンドプロンプトで(例えばのWin2Kと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ポートではなく仮想マシンを使用していることにも留意してください。
あなたはむしろ使用する場合はgrep
、ではなくfindstr
、そこに単一で.exe
のファイルバージョンUnxUtilsは、それはポータブルだし、それをインストールするか、Cygwinのようなものを使用する必要はありません。
.zip
ファイルの.exe
ファイルです。唯一の小さな欠点は、バージョンが少し古いことです。
grep
Windows用にも提供しています:gnuwin32.sourceforge.net/packages/grep.htm
ChocolateyをWindowsにインストールして、Gowツールをインストールしてみてください。これによりgrep
、Windows が提供されます。
Gow
Windows上のGNUを表します。WindowsでUnixコマンドラインユーティリティを提供します。
バッシュの使用
$ ls | grep root
Cmdの使用
> dir /b | findstr root
どこ/b
の略で、Bのディレクトリとファイルのリストがあります
/B
、/R
そして/C
私の答えは与えながらOPは、について質問していない正確な同等のものを
/b
は、dir
出力を出力と同じにすることls
です。テストすると、違いがわかります。したがって、完全に同等ではありません。
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ページで常に最新バージョンを見つけることができます。
コマンドラインパラメーターを使用して多くの機能を実行できるように、マルチ置換プログラムが用意されています。コマンドラインの使用法は次のとおりです。
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]
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
、コマンドプロンプトで使用できます。
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