Windows 명령 프롬프트에서 검색하기

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 버전에서는 라인 길이 제한findfindstr 뿐만 아니라 다른 명령어에도 적용되었습니다. 최근 버전에서는 이러한 제한을 해제하여 더 이상 이에 대해 걱정할 필요가 없습니다. findstr의 제한 사항과 버그, 특히 초기 Windows 버전에서의 경우를 보려면 이 StackOverflow 질문을 참조하세요.

findstr 명령은 OEM(MS DOS) 코드 페이지에서 작동합니다; 도트 메타문자는 확장 ASCII 문자 중 어느 것과도 일치하지 않습니다. 결과적으로 이 명령은 영어가 아닌 텍스트에는 매우 유용하지 않습니다. 또한 Unicode 문자(UTF-8 또는 UTF-16)를 검색할 수 없습니다.

결론

findstr /? 또는 find /?를 입력하여 다른 스위치에 대해 배울 수 있습니다. 예를 들어, 추가 스위치를 사용하면 하위 디렉토리에서 검색하거나 라인 번호를 인쇄할 수 있습니다. 공식 문서도 참조하실 수 있습니다.

일반적으로 findfindstr 명령은 구식이며 다양한 문제점과 제한 사항이 있습니다.

Source:
https://dzone.com/articles/search-from-the-windows-command-prompt