FINDSTR과 Select-String이라는 명령어를 들어보셨나요? Select-String은 입력 문자열과 파일에서 텍스트와 패턴을 검색하는 데 사용되는 cmdlet입니다. Linux의 grep 또는 Windows의 FINDSTR과 유사한 역할을 합니다. 이 가이드에서는 Windows 11/10에서 FINDSTR과 Select-String 명령어가 무엇인지, 그리고 어떻게 사용하는지 자세히 알아보겠습니다.

FINDSTR이란? FINDSTR 사용 방법
FINDSTR은 Windows에서 파일 내 특정 텍스트를 찾는 데 사용되는 명령어입니다. 'Find String'을 줄여서 FINDSTR이라고 부르게 되었으며, 특정 텍스트가 포함된 파일을 찾는 용도로도 활용됩니다. 다양한 기능을 수행할 수 있는 여러 FINDSTR 명령어가 있으며, 처음에는 Windows 2000 Resource Kit에 qgrep이라는 이름으로 출시되었습니다. Windows에 기본으로 탑재된 도구로 .exe 형식의 파일로 제공됩니다. 단, FINDSTR은 유니코드 형식의 공백 같은 널(null) 바이트는 검색하지 못한다는 점에 유의해야 합니다.
명령 프롬프트(Command Prompt)나 Microsoft에서 개발한 다른 명령줄 인터프리터에서 findstr 명령어를 사용할 때 지켜야 할 몇 가지 기본 규칙이 있습니다.
- 모든 FINDSTR 명령어는 문자열 뒤에 파일 이름을 포함해야 합니다.
- FINDSTR 명령어에는 리터럴 문자(literal character)와 메타 문자(meta-character)를 사용할 수 있습니다. 리터럴 문자는 문법상 특별한 의미가 없는 문자로, 알파벳과 숫자가 여기에 해당합니다. 반면 메타 문자는 각각 고유한 의미를 지닌 기호입니다. 아래 표는 문법에서 허용되는 메타 문자와 그 의미를 정리한 것입니다.
| 메타 문자 | 의미 |
|---|---|
| . | 와일드카드(Wildcard) – 임의의 한 문자 |
| * | 반복(Repeat) – 바로 앞의 문자 또는 클래스가 0번 이상 반복 |
| ^ | 행 시작 위치 – 줄의 시작 |
| $ | 행 끝 위치 – 줄의 끝 |
| [class] | 문자 클래스 – 집합 안의 임의의 한 문자 |
| [^class] | 역방향 클래스 – 집합에 속하지 않는 임의의 한 문자 |
| [x-y] | 범위(Range) – 지정된 범위 안의 임의의 문자 |
| \x | 이스케이프(Escape) – 메타 문자를 일반 문자로 취급 |
| \<string | 단어 시작 위치 – 단어의 시작 |
| string\> | 단어 끝 위치 – 단어의 끝 |
- 여러 개의 문자열을 검색하려면 검색 조건을 별도의 줄에 작성한 텍스트 파일을 만들어야 합니다.
/c구문을 제외하고는, 하나의 명령어로 여러 문자열을 검색할 때 문자열 사이에 공백을 사용합니다.
findstr 구문의 매개변수와 의미
| 매개변수 | 설명 |
|---|---|
| /b | 텍스트 패턴이 줄의 맨 앞에 있는 경우에만 일치시킵니다. |
| /e | 텍스트 패턴이 줄의 맨 끝에 있는 경우에만 일치시킵니다. |
| /l | 검색 문자열을 리터럴(literal)로 처리합니다. |
| /r | 검색 문자열을 정규 표현식으로 처리합니다. 기본 설정값입니다. |
| /s | 현재 디렉터리와 모든 하위 디렉터리를 검색합니다. |
| /i | 문자열 검색 시 대소문자를 구분하지 않습니다. |
| /x | 완전히 일치하는 줄만 출력합니다. |
| /v | 일치하지 않는 줄만 출력합니다. |
| /n | 일치하는 각 줄의 줄 번호를 출력합니다. |
| /m | 파일에 일치 항목이 있으면 파일 이름만 출력합니다. |
| /o | 일치하는 각 줄 앞에 문자 오프셋을 출력합니다. |
| /p | 인쇄 불가능한 문자가 포함된 파일은 건너뜁니다. |
| /off[line] | 오프라인 속성이 설정된 파일도 건너뛰지 않습니다. |
| /f:<file> | 지정된 파일에서 파일 목록을 가져옵니다. |
| /c:<string> | 지정된 텍스트를 리터럴 검색 문자열로 사용합니다. |
| /g:<file> | 지정된 파일에서 검색 문자열을 가져옵니다. |
| /d:<dirlist> | 지정된 디렉터리 목록을 검색합니다. 각 디렉터리는 세미콜론(;)으로 구분해야 하며, 예시는 dir1;dir2;dir3입니다. |
| /a:<colorattribute> | 두 자리 16진수로 색상 속성을 지정합니다. 자세한 정보는 color /?를 입력하세요. |
| <string> | filename에서 검색할 텍스트를 지정합니다. 필수 요소입니다. |
| [\<drive>:][<path>]<filename>[…] | 검색할 위치와 파일(또는 파일들)을 지정합니다. 최소 하나의 파일 이름이 필요합니다. |
| /? | 명령 프롬프트에 도움말을 표시합니다. |
findstr 명령어 활용 예시
1] x.y 파일에서 microsoft 또는 windows라는 단어를 검색하려면 다음과 같이 입력합니다:
findstr microsoft windows x.y
2] x.y 파일에서 "microsoft windows"라는 정확한 문구를 검색하려면 다음과 같이 입력합니다:
findstr /c:"microsoft windows" x.y
위 명령어에서 /c는 파일에서 지정된 텍스트 "microsoft windows"를 검색하는 데 사용됩니다.
3] twc.txt 텍스트 파일에서 대문자 M이 포함된 Microsoft라는 단어의 등장 위치를 찾으려면 다음과 같이 입력합니다:
findstr Microsoft twc.txt
4] 대소문자 구분 없이 특정 디렉터리와 하위 디렉터리에서 Microsoft라는 단어를 검색하려면 다음과 같이 입력합니다:
findstr /s /i Microsoft *.*
위 구문에서 /s는 현재 디렉터리와 하위 디렉터리를 검색하는 옵션이고, /i는 Microsoft 문자열의 대소문자(대문자 M)를 무시하는 옵션입니다.
5] 여러 개의 공백 뒤에 To로 시작하는 줄을 찾고, 해당 문자열이 나타난 줄 번호까지 표시하려면 다음과 같이 입력합니다:
findstr /b /n /r /c:^ *To *.bas
6] stringlist.txt에 저장된 검색 조건으로 filelist.txt에 나열된 여러 파일에서 여러 문자열을 검색하고, 결과를 result.out 파일에 저장하려면 다음과 같이 입력합니다:
findstr /g:stringlist.txt /f:filelist.txt > results.out
7] 특정 디렉터리와 하위 디렉터리에서 thewindowsclub이라는 단어가 포함된 파일을 찾으려면 다음과 같이 입력합니다:
findstr /s /i /m \<thewindowsclub\> *.*
8] thewindowsclub과 thesis, thermometer처럼 the로 시작하는 다른 단어들이 포함된 파일을 찾으려면 다음과 같이 입력합니다:
findstr /s /i /m \<the.* *.*
이것이 명령 프롬프트 같은 명령줄 인터프리터에서 findstr 명령어를 사용하는 방법입니다. findstr 명령어를 능숙하게 활용하려면 모든 매개변수와 그 기능, 그리고 메타 문자의 의미를 잘 이해하고 구문을 작성해야 합니다.
Select-String이란? 주요 매개변수 소개
PowerShell에서 코드를 작성하다 보면 수천 줄의 코드와 수천 개의 문자열 사이에서 특정 문자열이나 텍스트를 놓치는 경우가 있습니다. 이럴 때 Select-String 명령어를 사용하면 PowerShell 입력 파일에서 원하는 문자열과 텍스트를 손쉽게 검색할 수 있습니다. Linux의 grep과 매우 유사한 역할을 합니다.
Select-String은 입력 문자열과 파일에서 텍스트와 패턴을 검색하는 cmdlet으로, Linux의 grep이나 Windows의 FINDSTR과 비슷합니다. Select-String으로 텍스트를 검색하면 각 줄에서 첫 번째 일치 항목을 찾아 파일 이름, 줄 번호, 일치가 발생한 전체 줄을 표시합니다. 한 줄에서 여러 개의 일치 항목을 찾거나, 일치 항목 앞뒤의 텍스트를 표시하거나, True/False 같은 부울(Boolean) 값으로 결과를 얻을 수도 있습니다. 또한 명령어에서 사용한 표현식과 일치하지 않는 텍스트만 표시하는 것도 가능합니다. FINDSTR에서 사용하는 와일드카드는 Select-String에서도 동일하게 사용할 수 있습니다.
또한 Select-String은 ASCII, Unicode 등 다양한 파일 인코딩과 호환됩니다. 파일 인코딩을 판별할 때는 BOM(Byte-Order-Mark)을 사용하며, 파일에 BOM이 없으면 UTF8로 간주합니다.
Select-String의 매개변수
Microsoft는 구문에서 사용할 수 있는 아래와 같은 매개변수들을 제공합니다.
-AllMatches
Select-String이 기본적으로 각 줄의 첫 번째 일치 항목만 찾는 것과 달리, 한 줄의 모든 일치 항목을 검색합니다.
-CaseSensitive
대소문자를 구분하여 일치시킵니다. 기본적으로 Select-String은 대소문자를 구분하지 않습니다.
-Context
일치하는 줄 앞뒤로 지정한 수만큼의 줄을 함께 표시합니다. 예를 들어 1을 입력하면 일치하는 줄 앞뒤 각 한 줄씩 표시됩니다.
-Culture
코딩에는 ordinal, invariant 같은 문화권(culture) 설정이 존재합니다. 이 매개변수는 구문에서 해당 문화권을 지정하는 데 사용됩니다.
-Encoding
파일 내 텍스트의 인코딩 형식(ASCII, UTF8, UTF7, Unicode 등)을 지정합니다.
-Exclude
파일에서 특정 텍스트를 검색 대상에서 제외합니다.
-Include
파일에서 특정 텍스트를 검색 대상에 포함시킵니다.
-InputObject
검색할 텍스트를 지정합니다.
-List
해당 텍스트와 일치하는 파일 목록을 가져옵니다.
-LiteralPath
검색할 경로를 지정합니다.
-NoEmphasis
기본적으로 Select-String은 일치 항목을 강조 표시하는데, 이 매개변수를 사용하면 강조 표시를 하지 않습니다.
-NotMatch
지정된 패턴과 일치하지 않는 텍스트를 찾습니다.
-Path
와일드카드와 함께 검색할 경로를 지정합니다.
-Pattern
각 줄에서 찾을 패턴을 지정합니다.
-Quiet
True 또는 False 같은 부울 값으로 결과를 출력합니다.
-Raw
MatchInfo 객체가 아닌 일치하는 객체 자체만 표시합니다.
-SimpleMatch
정규 표현식 일치가 아닌 단순 일치(simple match)를 지정합니다.
FINDSTR과 Select-String의 차이점
FINDSTR은 PowerShell 이전 시대부터 존재했던 실행 파일로, 파일에서 텍스트와 문자열을 검색하는 데 사용됩니다. 반면 Select-String은 파일에서 텍스트와 패턴을 검색하는 PowerShell cmdlet입니다. FINDSTR에 비해 Select-String이 더 강력하고 복잡한 cmdlet으로, 일치 항목에 관한 더 많은 정보를 표시해 줍니다.
PowerShell에서 grep에 해당하는 명령어는?
Select-String이 Windows에서 사용할 수 있는 PowerShell 버전의 grep입니다. grep과 동일한 방식으로 작동하며, 구문에 사용한 매개변수에 따라 일치 항목에 대한 상세 정보를 제공합니다.
FINDSTR은 Word 파일에서 작동하나요?
네, FINDSTR은 Word 파일에서도 작동합니다. 하지만 파일에 해당 문자열이 존재하더라도 일치 항목을 제대로 찾아내지 못할 수 있습니다. 알려지지 않은 기술적 이유로 .doc 형식의 바이너리 파일에서는 결과를 얻을 수 있지만, .docx 형식에서는 결과를 얻기 어렵습니다.
관련 글: Windows에서 PowerShell 버전 확인하는 방법