FIND 명령어
Windows 명령 프롬프트 또는 배치 파일에서 여러 파일의 텍스트를 검색하려면 FIND 명령어를 사용할 수 있습니다. 이 명령어는 MS DOS 시절부터 존재하며 아직도 Windows 11에서 사용할 수 있습니다. Unix의 grep
명령어와 유사하지만 정규 표현식을 지원하지 않습니다. 현재 디렉토리에서 borogoves
라는 단어를 검색하려면 다음 구문을 따르세요:
find "borogoves" *
패턴 주변의 쌍따옴표는 필수적입니다. PowerShell을 사용 중이라면 단일 따옴표도 포함해야 합니다:
find '"borogoves"' *
별표(*
) 대신 *.htm?
와 같은 파일 마스크를 지정할 수 있습니다. find
명령어는 파일 이름을 표시합니다. 이 파일 내에서 일치하는 것을 찾지 못하더라도 말이죠:
검색은 대소문자 구분이 기본이므로 일반적으로 /I
스위치를 추가하여 대문자와 소문자를 동일하게 취급해야 합니다:
find /I "<a href=" *.htm
검색할 파일을 지정하지 않으면 find
는 다른 명령의 출력을 파이핑할 수 있도록 stdin에서 텍스트 입력을 기다립니다. 예를 들어 Windows에서 지원되는 모든 복사 명령을 나열할 수 있습니다:
help | find /i "copy"
또 다른 스위치인 /V
를 사용하면 grep -v
명령과 유사하게 패턴을 포함하지 않는 모든 줄을 찾을 수 있습니다.
배치 파일에서 find
명령어가 조건을 찾지 못하면 종료 코드(errorlevel)를 1로 설정한다는 사실을 이용할 수 있습니다. 예를 들어, 컴퓨터가 64비트 또는 32비트 Windows 버전을 실행하고 있는지 확인할 수 있습니다.
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
FINDSTR 명령어: 정규 표현식 검색
정규 표현식을 찾아야 할 때는 Windows XP에서 소개된 FINDSTR
명령어를 사용해보세요. 역사적인 이유로 findstr
는 정규 표현식의 제한된 하위 집합만 지원하므로 다음과 같은 정규식 기능만 사용할 수 있습니다:
- 점
.
은 줄바꿈 및 확장 ASCII 문자를 제외한 모든 문자와 일치합니다. - 문자 목록
[abc]
는a
,b
,c
중 하나와 일치합니다. - 문자 목록 범위
[a-z]
는a
부터z
까지의 모든 문자와 일치합니다. - 별표 (
*
)는 이전 문자가 0번 이상 반복될 수 있음을 나타냅니다. \<
및\>
기호는 단어의 시작과 끝을 표시합니다.- 캐럿 (
^
) 및 달러 기호 ($
)는 줄의 시작과 끝을 나타냅니다. - 백슬래시 (
\
)는 메타문자를 이스케이프하여 문자 그대로 찾을 수 있게 해줍니다. 예를 들어,\$
는 달러 기호 자체를 찾습니다.
Findstr는 문자 클래스 (\d
), 선택 (|
), 또는 다른 반복 (+
또는 {5}
)을 지원하지 않습니다.
기본 구문은 FIND
명령어와 동일합니다:
findstr "\<20[0-9][0-9]\>" *.htm
이 명령은 현재 디렉토리의 .htm
파일에서 2000으로 시작하는 모든 연도를 찾습니다. find
와 마찬가지로 대소문자 구분 없는 검색을 위해 /I
스위치를 사용하세요:
FINDSTR 제한 사항 및 특이점
문자 목록 [a-z]
은 항상 대소문자를 구분하지 않으므로 echo ABC | findstr "[a-z]"
는 일치합니다.
공백 문자는 findstr
에서 선택 메타문자로 작동하므로 findstr "new shoes" *
와 같은 검색 쿼리는 new
또는 shoes
를 포함하는 모든 라인을 찾습니다. 불행히도 정규 표현식에서 공백을 문자 그대로로 사용하고 이스케이프하는 방법은 없습니다. 예를 들어, 공백으로 시작하는 라인을 찾을 수 없습니다.
구문 오류는 정규 표현식에서 무시됩니다. 예를 들어, findstr "[" *
는 [
문자를 포함하는 모든 라인과 일치합니다.
파일에 Unix 줄 바꿈 (LF)이 포함되어 있으면 $
메타문자가 제대로 작동하지 않습니다. 파일의 마지막 줄이 줄 종결자가 없으면 findstr
가 이를 찾지 못합니다. 예를 들어, findstr "</html>$" *
는 </html> 후에 CR+LF가 없으면 작동하지 않습니다.
초기 Windows 버전에서는 라인 길이 제한이 find
및 findstr
뿐만 아니라 다른 명령어에도 적용되었습니다. 최근 버전에서는 이러한 제한을 해제하여 더 이상 이에 대해 걱정할 필요가 없습니다. findstr
의 제한 사항과 버그, 특히 초기 Windows 버전에서의 경우를 보려면 이 StackOverflow 질문을 참조하세요.
findstr 명령은 OEM(MS DOS) 코드 페이지에서 작동합니다; 도트 메타문자는 확장 ASCII 문자 중 어느 것과도 일치하지 않습니다. 결과적으로 이 명령은 영어가 아닌 텍스트에는 매우 유용하지 않습니다. 또한 Unicode 문자(UTF-8 또는 UTF-16)를 검색할 수 없습니다.
결론
findstr /?
또는 find /?
를 입력하여 다른 스위치에 대해 배울 수 있습니다. 예를 들어, 추가 스위치를 사용하면 하위 디렉토리에서 검색하거나 라인 번호를 인쇄할 수 있습니다. 공식 문서도 참조하실 수 있습니다.
일반적으로 find
및 findstr
명령은 구식이며 다양한 문제점과 제한 사항이 있습니다.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt