답변:
Findstr은 원하는대로 들립니다. 나는 항상 Windows 플랫폼에서 대략 grep와 동등한 것으로 사용합니다.
파이프가있는 또 다른 예 :
C:\> dir /B | findstr /R /C:"[mp]"
findstr
는 정규식 패턴에 대안이 포함되어 있지 않을 수 있다는 것입니다.
findstr
기본적으로 다른 Windows 버전에는 어떤 것이 있습니까? Windows XP부터 ?
몇 가지 가능성이 있습니다.
grep
명령어 의 포트를 사용하십시오 . 몇 가지 선택이 있습니다. GNUWin32 , cygwin 및 unxutils 가 종종 언급됩니다 . SFUA 유틸리티 툴킷 의 도구는 잘 알려져 있지 않지만, 어떤면에서는 더 나은 것으로, Windows 7 Ultimate Edition 및 Windows Server 2008 R2와 함께 제공 되는 UNIX 기반 응용 프로그램 용 하위 시스템 에서 실행됩니다 . (Windows XP의 경우, 하나의 수 를 다운로드 하고 설치 서비스를 UNIX 버전 3.5 .)이 툴킷은 명령 줄 TUI 도구의 큰 숫자를 가지고,에서 mv
와 du
에의 콘과 C 쉘을 통해, perl
그리고awk
. x86-64뿐만 아니라 x86-64 및 IA64 버전으로 제공됩니다. 이 프로그램은 에뮬레이터 DLL (예 cygwin1.dll
:)을 Win32보다 계층화 하지 않고 Windows의 고유 한 적절한 POSIX 환경에서 실행 합니다. 그렇습니다. 툴킷에는 grep
300여 개의 툴킷이 있습니다.grep
사람들이 작성하고 게시 한 많은 기본 Win32 명령 중 하나를 사용하십시오 . 예를 들어, Tim Charron은 수정 된 GNU grep의 기본 Win32 버전을 가지고 있습니다. 도 있습니다 PowerGREP , 베어 그렙 , 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
cmd에서 직접 PowerShell 명령을 실행하려면
C:\>powershell -command "ls | select-string root"
초기 개정판에서는 MS-DOS를 썼습니다 FIND
. 그러나 더 이상 사용되지 않는 고대 OS입니다.
Windows NT 명령 프롬프트에서 (예를 들어, 윈도우 2000 및 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에서, 그 통해 설치 고우 포커 도구를. grep
Windows에서 제공됩니다 .
Gow
Windows에서 GNU를 나타냅니다. Windows에서 Unix 명령 행 유틸리티를 제공합니다.
배쉬 사용
$ ls | grep root
Cmd 사용
> dir /b | findstr root
여기서 /b
의미 나 디렉토리와 파일의 목록은
/B
, /R
그리고 /C
내 대답이 제공하는 동안 영업 이익에 대해 물어 보지 않았다 정확한 동등한
/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 는 크기가 약 500KB에 불과하고 적극적으로 유지 관리되므로 사용하는 것이 좋습니다 .
따라서 귀하의 경우 명령 프롬프트에서 다음과 같습니다.
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