PowerShell을 사용하여 문자열에서 여러 패턴 선택
PowerShell에는 문자열 패턴을 찾아 명령줄에 출력으로 표시하는 Linux의 grep과 유사한 명령이 있습니다. 이 문서에서는 Windows PowerShell을 사용하여 특정 문자열 패턴을 검색하는 기능을 제공하는 cmdlet에 대해 설명합니다.
Windows의 Select-String
명령 소개
Linux의 grep 명령은 Windows의 Select-String
명령과 비슷합니다. 이 cmdlet은 기본적으로 각 줄에서 첫 번째 일치 항목을 검색한 다음 일치하는 문자열 내의 파일 이름, 줄 번호 및 텍스트를 표시합니다.
Select-String
명령은 바이트 순서 표시(BOM)를 사용하여 인코딩 형식을 결정하여 유니코드 텍스트와 같은 여러 파일 인코딩에서 작동할 수도 있습니다. Select-String은 BOM이 없으면 UTF8 파일이라고 생각합니다.
Select-String
의 매개변수
AllMatches
– 일반적으로Select-String
명령은 각 줄에서 첫 번째 일치 항목만 찾습니다. 그러나 cmdlet은 이 매개 변수를 사용하여 둘 이상의 일치 항목을 검색합니다. 이 매개변수는 여전히 각 라인에 대해 발견된 모든 일치 항목을 포함하는 단일MatchInfo
개체를 내보냅니다.CaseSensitive
– 문자열 일치는 기본적으로 대소문자를 구분하지 않습니다. 이 매개 변수는 cmdlet이 입력 패턴과 정확히 일치하는 항목을 찾도록 합니다.컨텍스트
– 매개변수가 표시할 일치 전후의 줄 수를 정의할 수 있는 매개변수입니다. 이 매개변수를 추가하면 방출된MatchInfo
객체가 지정된 행을 포함하는 새 Context 속성을 포함하도록 수정됩니다.Select-String
을 다른Select-String
호출로 전환하면 단일 결과MatchInfo
라인 속성에서만 검색하기 때문에 컨텍스트를 사용할 수 없습니다.Culture
–SimpleMatch
매개변수와 함께 사용되며 지정된 패턴과 일치시킬 문화권을 지정합니다. 이 매개변수에는en-US
,es
또는fr-FR
예제와 같은 옵션이 포함됩니다.
Ordinal
및 Invariant
선택은 두 가지 더 유용한 가능성입니다.
서수
는 비언어적 이진 비교에 사용되는 반면불변
은 독립적 문화 비교에 사용됩니다. 이 매개 변수는 PowerShell 7에서 데뷔했으며 이전 버전에는 없었습니다.
이것은 Get-Culture
명령을 사용하여 결정할 수 있는 시스템의 현재 문화권을 사용한다는 점에 유의하십시오.
-
인코딩
– 검색할 대상 파일의 인코딩을 지정합니다. 기본값은utf8NoBOM
입니다.인코딩
옵션은 이제 PowerShell Core 6.2부터 시작하여 등록된 코드 페이지의 숫자 ID 또는 문자열 이름(예: windows-1251)을 사용합니다.ASCII
: 이 매개변수는 ASCII(7비트) 문자 집합에 대한 인코딩을 사용합니다.bigendianunicode
: 이 매개변수는 big-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩됩니다.OEM
: 이 매개변수는 MS-DOS 및 콘솔 프로그램에 기본 인코딩을 사용합니다.Unicode
: 이 매개변수는 little-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩됩니다.utf7
: 이 매개변수는 UTF-7 형식으로 인코딩됩니다.utf8
: 이 매개변수는 UTF-8 형식으로 인코딩됩니다.utf8BOM
: 이 매개변수는 바이트 순서 표시(BOM)를 사용하여 UTF-8 형식으로 인코딩됩니다.tf8NoBOM
: 바이트 순서 표시(BOM) 없이 UTF-8 형식으로 인코딩utf32
: UTF-32 형식으로 인코딩합니다.
-
제외
– 경로 매개변수로*.txt
와 같은 패턴을 사용하여 특정 항목을 제외합니다. -
Include
–Include
매개변수는Exclude
매개변수와 마찬가지로*.csv
와 같은 패턴과 일치하는 항목만 포함합니다. -
목록
– 이 매개변수는 각 입력 파일에서 일치하는 텍스트의 첫 번째 인스턴스를 반환합니다. 이 매개변수는 내용이 일치하는 파일 목록을 검색하는 빠르고 효율적인 방법입니다. -
LiteralPath
는Select-String
에*
와 같은 값을 와일드카드로 해석하는 대신 값을 입력으로 사용하도록 지시합니다. 경로에 이스케이프 문자가 포함된 경우 분석하지 않도록 작은따옴표로 묶습니다. -
NoEmphasis
– 이 매개 변수는 일치 항목 강조 표시를 비활성화합니다.Emphasis
매개변수는 배경 텍스트 색상을 기준으로 음수 색상을 사용합니다. -
NotMatch
– 이 매개변수는 지정된 패턴과 일치하지 않는 텍스트를 찾습니다. -
경로
– 검색할 파일의 경로는 이 매개변수로 지정됩니다. 와일드카드를 사용할 수 있지만 디렉토리만 지정할 수는 없습니다.로컬 디렉토리가 기본값입니다.
-
Pattern
– 이 매개 변수는 정규식을 기반으로 입력 콘텐츠 또는 파일을 검색하기 위한 패턴을 지정합니다. -
SimpleMatch
– 정규식 대신 이 매개변수는 기본 일치를 사용합니다. 정규식을 사용하지 않기 때문에 반환된MatchInfo
개체의 Matches 필드가 비어 있습니다. -
Raw
– 이 매개변수는MatchInfo
개체 없이 일치하는 문자열을 출력합니다. 이 동작은 PowerShell의 개체 지향 특성이 아니라 grep과 가장 유사합니다. -
Quiet
– 패턴이 발견된 경우에만$true
또는$false
의 부울 값을 반환합니다.
Windows PowerShell에서 Select-String
Cmdlet 사용
예를 들어 Select-String
을 활용하여 일치하는 텍스트를 더 쉽게 찾는 방법을 살펴보겠습니다. 간단한 예부터 시작하여 소수의 CSV 파일에서 John
을 찾아보겠습니다.
예제 코드:
Select-String -Path "PS\*.csv" -Pattern "John"
출력:
PS\user1.csv:3:John,Doe,jdoe@test.com,Male
PS\user2.csv:5:John,Johnson,jjohnson@abccompany.com,Male
각 출력의 표시 속성도 볼 수 있습니다.
예제 코드:
Select-String -Path "Users\*.csv" -Pattern "John" | Select-Object * -First 1
출력:
IgnoreCase : True
LineNumber : 3
Line : John,Doe,jdoe@test.com,Male
Filename : user1.csv
Path : C:\Temp\PS
Pattern : John
Context :
Matches : {2}
여러 패턴을 검색하려면 Pattern 매개변수 아래에서 매개변수 값을 쉼표로 구분할 수 있습니다.
예제 코드:
Select-String -Path "Users\*.csv" -Pattern "John", "Henry", "Jonathan"
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn