Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PowerShell에서 Grep처럼 텍스트 검색하기: Select-String Cmdlet 활용법

Linux/Unix 환경에서 grep 명령어는 로그 파일에서 특정 텍스트(문자열)나 오류를 찾을 때 가장 널리 사용되는 도구입니다. 또한 다른 명령어의 출력 결과에서 원하는 데이터를 필터링하거나 선택하는 용도로도 활용할 수 있습니다.

기본적인 사용 형식은 다음과 같습니다.

command | grep search

PowerShell의 Select-String Cmdlet

Windows PowerShell 환경에서는 Select-String cmdlet을 사용하여 파일 내에서 특정 텍스트 문자열을 검색할 수 있습니다. 이는 Linux의 grep과 거의 동일한 역할을 수행합니다.

예를 들어, 아래 명령어는 텍스트 파일이나 표준 출력(stdout)에서 ERROR라는 문자열이 포함된 모든 줄을 화면에 표시합니다.

Select-String -Path c:\tmp\makeapp_sxtracesxs.txt -Pattern "ERROR"

명령어 실행 결과에는 검색한 텍스트가 포함된 줄의 개수와 해당 줄의 실제 내용이 함께 출력됩니다.

특정 디렉터리의 모든 TXT 파일 검색하기

특정 디렉터리에 있는 모든 TXT 파일에서 문자열을 검색하려면 아래와 같은 명령어를 사용할 수 있습니다.

Select-String -Path c:\tmp\*.txt -Pattern "ERROR"

폴더 내 전체 파일을 대상으로 검색할 때 유용하며, 예를 들어 Exchange Server에서 전송(SMTP) 로그나 메시지 추적 로그를 분석할 때 특히 효과적입니다.

Include 및 Exclude 옵션으로 파일 범위 지정하기

-Include-Exclude 옵션을 사용하면 검색 대상 파일을 포함하거나 제외할 수 있습니다. 아래 명령어는 파일 이름에 copy가 포함되지 않은 모든 TXT 및 LOG 파일을 대상으로 검색을 수행합니다.

$path = "c:\tmp\*"
Select-String -Path $path -Pattern "ERROR" -Include "*.txt","*.log" -Exclude "*copy*"

Get-ChildItem으로 하위 디렉터리까지 재귀적으로 검색하기

앞선 예제들은 지정된 디렉터리 자체만 검색합니다. 중첩된 하위 디렉터리까지 재귀적으로 파일을 검색하려면 Get-ChildItem cmdlet과 함께 파이프라인으로 연결하여 사용해야 합니다.

Get-ChildItem -Path 'c:\tmp\' -Recurse -include "*.mp3","*.avi" -ErrorAction SilentlyContinue | Select-String -SimpleMatch "ERROR","WARNING"

-SimpleMatch 옵션은 정규식 해석 없이 지정한 문자열 그대로 일치 여부를 판단하므로, 단순 키워드 검색 시 더 빠르고 직관적인 결과를 얻을 수 있습니다. 이처럼 Select-String을 다른 cmdlet과 조합하면 Windows 환경에서도 Linux의 grep만큼 강력하고 유연한 텍스트 검색이 가능합니다.