PowerShell을 사용하여 문자열에서 여러 패턴 선택

Marion Paul Kenneth Mendoza 2023년6월21일
  1. Windows의 Select-String 명령 소개
  2. Windows PowerShell에서 Select-String Cmdlet 사용
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 라인 속성에서만 검색하기 때문에 컨텍스트를 사용할 수 없습니다.
  • CultureSimpleMatch 매개변수와 함께 사용되며 지정된 패턴과 일치시킬 문화권을 지정합니다. 이 매개변수에는 en-US, es 또는 fr-FR 예제와 같은 옵션이 포함됩니다.

OrdinalInvariant 선택은 두 가지 더 유용한 가능성입니다.

  • 서수는 비언어적 이진 비교에 사용되는 반면 불변은 독립적 문화 비교에 사용됩니다. 이 매개 변수는 PowerShell 7에서 데뷔했으며 이전 버전에는 없었습니다.

이것은 Get-Culture 명령을 사용하여 결정할 수 있는 시스템의 현재 문화권을 사용한다는 점에 유의하십시오.

  • 인코딩 – 검색할 대상 파일의 인코딩을 지정합니다. 기본값은 utf8NoBOM입니다. 인코딩 옵션은 이제 PowerShell Core 6.2부터 시작하여 등록된 코드 페이지의 숫자 ID 또는 문자열 이름(예: windows-1251)을 사용합니다.

    1. ASCII: 이 매개변수는 ASCII(7비트) 문자 집합에 대한 인코딩을 사용합니다.
    2. bigendianunicode: 이 매개변수는 big-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩됩니다.
    3. OEM: 이 매개변수는 MS-DOS 및 콘솔 프로그램에 기본 인코딩을 사용합니다.
    4. Unicode: 이 매개변수는 little-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩됩니다.
    5. utf7: 이 매개변수는 UTF-7 형식으로 인코딩됩니다.
    6. utf8: 이 매개변수는 UTF-8 형식으로 인코딩됩니다.
    7. utf8BOM: 이 매개변수는 바이트 순서 표시(BOM)를 사용하여 UTF-8 형식으로 인코딩됩니다.
    8. tf8NoBOM: 바이트 순서 표시(BOM) 없이 UTF-8 형식으로 인코딩
    9. utf32: UTF-32 형식으로 인코딩합니다.
  • 제외 – 경로 매개변수로 *.txt와 같은 패턴을 사용하여 특정 항목을 제외합니다.

  • IncludeInclude 매개변수는 Exclude 매개변수와 마찬가지로 *.csv와 같은 패턴과 일치하는 항목만 포함합니다.

  • 목록 – 이 매개변수는 각 입력 파일에서 일치하는 텍스트의 첫 번째 인스턴스를 반환합니다. 이 매개변수는 내용이 일치하는 파일 목록을 검색하는 빠르고 효율적인 방법입니다.

  • LiteralPathSelect-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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - PowerShell String