Windows 7에 해당하는 Grep?


241

Windows 7과 동등한 명령 프롬프트 grep이 있습니까? 즉, 명령 결과를 필터링하고 싶습니다.

배쉬 사용 :

ls | grep root

Windows 명령 프롬프트에서 무엇입니까?


9
ms-dos를 명령 프롬프트와 혼동하지 마십시오. + 찾기 및 findstr 및 심지어 grep을 사용하는 경우, 빠른 검색을 통해 쉽게 찾을 수 있습니다. 리눅스와 윈도우에는 동등한 명령 표가 있습니다. 또한 bash 예제는 bash에만 국한되지 않습니다. * nix OS라고 생각합니다.
barlop

답변:


280

Findstr은 원하는대로 들립니다. 나는 항상 Windows 플랫폼에서 대략 grep와 동등한 것으로 사용합니다.

파이프가있는 또 다른 예 :

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

그래, 내가 찾고있는 것 같습니다. 아마 한계가 있음을 이해합니다. 시도해 볼게요.
chrisjlee 2016 년

18
왜 그들은 단지 grep이라고 부를 수 없었습니까!
Victor Grazi

6
@VictorGrazi 그들은 실제로 처음에, 이 기사를 참조 하십시오 . 원래 이름은 qgrep이지만 나중에 이름이 바뀌 었습니다.
Zitrax

3
큰 문제 findstr는 정규식 패턴에 대안이 포함되어 있지 않을 수 있다는 것입니다.
Wolf

문제는 Windows 7에 관한 것이지만 findstr기본적으로 다른 Windows 버전에는 어떤 것이 있습니까? Windows XP부터 ?
피터 Mortensen

44

몇 가지 가능성이 있습니다.

  • 유닉스 grep명령어 의 포트를 사용하십시오 . 몇 가지 선택이 있습니다. GNUWin32 , cygwinunxutils종종 언급됩니다 . SFUA 유틸리티 툴킷 의 도구는 잘 알려져 있지 않지만, 어떤면에서는 더 나은 것으로, Windows 7 Ultimate Edition 및 Windows Server 2008 R2와 함께 제공 되는 UNIX 기반 응용 프로그램 용 하위 시스템 에서 실행됩니다 . (Windows XP의 경우, 하나의 수 를 다운로드 하고 설치 서비스를 UNIX 버전 3.5 .)이 툴킷은 명령 줄 TUI 도구의 큰 숫자를 가지고,에서 mvdu에의 콘과 C 쉘을 통해, perl그리고awk. x86-64뿐만 아니라 x86-64 및 IA64 버전으로 제공됩니다. 이 프로그램은 에뮬레이터 DLL (예 cygwin1.dll:)을 Win32보다 계층화 하지 않고 Windows의 고유 한 적절한 POSIX 환경에서 실행 합니다. 그렇습니다. 툴킷에는 grep300여 개의 툴킷이 있습니다.
  • grep사람들이 작성하고 게시 한 많은 기본 Win32 명령 중 하나를 사용하십시오 . 예를 들어, Tim Charron은 수정 된 GNU grep의 기본 Win32 버전을 가지고 있습니다. 도 있습니다 PowerGREP , 베어 그렙 , grepWin , AstroGrepdnGrep는 이러한 모든 GUI 프로그램을 있지만하지 TUI 프로그램.
  • 제공된 사용 findfindstr. grep정규 표현식 기능과 마찬가지로 구문은 구문과 다릅니다 .

cygwin은 Win 7에서 훌륭하게 일했습니다. grep이 필요했고 GnuWin32 grep이 작동하지 않았습니다.
Kozuch

SUA C : \ Windows \ SUA> dir perl * / s / b 파일에 perl이 보이지 않고 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

cmd에서 직접 PowerShell 명령을 실행하려면

C:\>powershell -command "ls | select-string root"


17

초기 개정판에서는 MS-DOS를 썼습니다 FIND. 그러나 더 이상 사용되지 않는 고대 OS입니다.

Windows NT 명령 프롬프트에서 (예를 들어, 윈도우 2000 및 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 2016 년

3
@Chris : 설치가 없습니다. .zip파일의 .exe파일 일뿐 입니다. 유일한 작은 단점은 버전이 약간 오래된 것입니다.
paradroid 2016 년

6
나이가 많은 단점은 무엇입니까? 소프트웨어가 오래 될 수 있습니까? 모든 신선한 바이트.
사용자가 알 수 없음

3
GnuWin32는 grepWindows 도 제공 합니다 : gnuwin32.sourceforge.net/packages/grep.htm
LiuYan 刘 研

3
@userunknown, 예를 들어, unxutils sed 명령은 이전 버전이며 \ d를 지원하지 않습니다 (예 : \ d22). 오래된 wget은 최신 버전의 페이지를 다운로드하지 못할 수 있으며, 지원을 요청하면 일부 문제를 해결할 수있는 최신 페이지를 요청할 수 있습니다. 정말 오래된 grep은 의심 할 여지없이 현재 정규식의 정규식 지원 수준을 가지지 않을 것입니다.
18 분 59 초

3

당신은 설치를 시도 할 수 있습니다 Chocolatey을 Windows에서, 그 통해 설치 고우 포커 도구를. grepWindows에서 제공됩니다 .

GowWindows에서 GNU를 나타냅니다. Windows에서 Unix 명령 행 유틸리티를 제공합니다.


1
apt-get과 비슷하지만 Windows 용 패키지 관리자입니다. 비주얼 스튜디오의 패키지 관리자 인 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의미 디렉토리와 파일의 목록은


2
이것은 다른 답변을 복제하고 새로운 내용을 추가하지 않습니다. 실제로 새로운 내용이 없다면 답변을 올리지 마십시오.
DavidPostill

@DavidPostill :이 빠른 해결책이다 "TL은, DR"(나 같은) 사용자
vladkras

그것은 새로운 것을 기여하지 않는 답변을 추가 한 것에 대한 변명의 여지가 없습니다. 어쨌든 허용 된 답변은 항상 먼저 표시되므로 답을 미리 읽어보십시오.
DavidPostill

@DavidPostill는 생각하지 않지만, 허용 대답은 여러 과도하고 포함 설명 할 수없는 키를 /B, /R그리고 /C내 대답이 제공하는 동안 영업 이익에 대해 물어 보지 않았다 정확한 동등한
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 명령을 계속 사용할 수 있습니다.


unxutils 당신이 ... UNX GREP이 얻을 수있는 그렙은 늦게되지 않습니다 2.4.2하지만 나중에 하나 gnuwin32있다 2.5.4
barlop

0

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명령 프롬프트에서 사용할 수 있습니다 .


그것은 안드로이드 빌드도 있습니다
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

그런데,이 무딘 대답은 러시아의 유명한 dev에 블로그에 44 upvotes있다 habrahabr.ru/post/71568
vladkras
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.