Unix나 Linux와 같은 OS에서는 파일 내 문자열 찾는 유틸리티라면 누구나 grep을 떠올린다.
광활한 file system에서 내가 원하는 문자열을 포함하고 있는 파일을 찾는 것이 생각보다 더욱 빈번하고 중요한 일인 경우가 많다.
특히, 프로그래밍을 하는 경우는 더욱 더 그 쓰임새가 요긴하다.
윈도우에서는 기본 shell인 explorer에서 파일 찾기에 대한 기능이 grep에 비해서 약하다는 생각이 든다. 바스타부터 검색 기능을 강화했다고는 하지만, 파일을 찾는 것이 아닌, 파일 내 문자열을 찾는 것은 아직 만족할만한 수준은 아닌 것 같다. 물론 grep도 하나의 유틸리티이지만, 워낙 널리 쓰이고, 기본적으로 OS에 포함되어 있다보니, OS의 일부라고 해도 과언이 아니다.
grep과 비슷한 수준의 파일 탐색 기능을 윈도우에서도 사용할 수 있는 방법이 있다.
윈도우 비스타부터 포함되기 시작한 powershell은 그 전의 command 프로그램에서 더욱 더 Unix의 shell과 비슷한 모양과 기능을 가지는 shell이다. shell에서 실행되는 명령어를 cmdlet이라는 용어로 부르는데, ls와 같은 Unix 명령어도 alias 형태를 통해서 제공한다.
'get-command' 명령어를 통해서 powershell에서 사용할 수 있는 cmdlet, function, alias를 쭉 볼 수 있다.
어떤 명령어에 대해서 알고 싶으면, 'get-help <알고 싶은 명령어>'와 같은 형태로 실행시키면 된다. 그러면 예제, 자세한 설명, 기술적인 설명까지 많은 설명이 나온다. 물론 한글화도 잘 되어 있다.
파일 내에서 문자열을 찾는 것은
get-childitem와
select-string 두 가지 명령어를 조합하여 만든다.
일단, get-childitem은 어떤 대상의 자식 아이템을 보여준다. 즉, ls와 같은 명령어다. get-childitem을 사용해서 내가 원하는 파일들을 열거한다. 이렇게 열거된 파일들 중에서 select-string을 사용해서 내가 찾고자 하는 문자열이 있는지 확인한다. 다시 말하면, get-childitem의 출력이 select-string의 입력이 되는 것이다.
예) c:\project1\src\와 그 하위 폴더에 있는 cpp 파일들 중에서 m_nCount라는 변수가 쓰인 곳을 모두 찾고 싶을 때.
PS C:\> get-childitem project1\src -recurse | select-string -pattern m_nCount -include *.cpp
다음은 MS의 powershell 블러그에 있는 select-string 기능에 대한 이야기이다. 맨 위에 Unix의 grep에 대한 언급이 되어 있다.
http://blogs.msdn.com/powershell/archive/2008/03/23/select-string-and-grep.aspx