파워셸 그렙

  1. Select-String Cmdlet
  2. PowerShell을 사용한 전형적인 Grep 작업
  3. 패턴 찾기를 위한 PowerShell Select-String 사용
파워셸 그렙

파워셸 코드 개발 시 문자열 내 또는 전체 텍스트 파일의 내용을 스캔해야 할 때 어디로 가십니까? 리눅스를 많이 사용했다면 인기 있는 grep 유틸리티에 익숙할 것입니다. grep 유틸리티는 다양한 매개변수를 사용하여 텍스트를 찾을 수 있게 해 주지만, Windows에서는 사용할 수 없습니다. 따라서 이 경우, 파워셸에서 Select-String cmdlet을 사용합니다.

Select-String Cmdlet

Select-String은 기본적으로 각 줄에서 처음 일치를 확인하고, 이후 일치하는 줄의 줄 번호, 파일 이름 및 텍스트를 보여줍니다. Select-String은 바이트 순서 표시(BOM)를 사용하여 인코딩 유형을 결정함으로써 유니코드 텍스트와 같은 여러 파일 인코딩 방식에서도 작동합니다. BOM이 없으면 Select-String은 UTF8 파일로 간주합니다.

Select-String cmdlet의 몇 가지 사용 예시는 아래에 설명되어 있습니다.

PowerShell을 사용한 전형적인 Grep 작업

예제를 통해 시작해 보겠습니다. 이름과 주소가 포함된 문자열이 있으며, 이 문자열은 비구조적이라고 가정해 보겠습니다. 우리는 이름을 추출하고자 합니다. 그래서 우리가 어떻게 할지를 아래에서 설명하겠습니다.

||Sara Peiris|| 37, De silva road, Panadura
 --||Tim Gangster||-- 345, Yolks street,KL
 ==|Suz Maker|== 44 Main, Cydney, CA

위의 텍스트는 users 변수에 할당됩니다. 따라서 ‘Pattern’ 매개변수를 사용하여 이름을 검색하려고 시도할 것입니다.

test | Select-String -Pattern 'Sara Peiris'

출력:

파워셸 grep 1

여기서 Select-String 메서드가 작동했지만 전체 문자열을 전달했기 때문에 지정된 결과를 반환하지 않았다는 것을 이해할 수 있습니다. 따라서 각 특정 항목이 단일 줄로 제공되므로, 줄 바꿈 문자를 사용하여 단일 줄을 전송해 보겠습니다.

PS> test = test -split "`n"
PS> test | Select-String -Pattern 'Sara Peiris'

출력:

파워쉘 그랩 2

여기서 단일 줄을 반환하는 것을 볼 수 있습니다. 다음으로, 우리는 여러 줄을 반환할 수 있는 방법을 살펴봐야 합니다.

패턴 찾기를 위한 PowerShell Select-String 사용

여기서는 모든 줄에 대해 유효한 일반 패턴을 찾아야 합니다. 따라서 이전 예제를 보면 모든 이름은 |로 둘러싸여 있고, 이름은 공백으로 구분되어 있습니다. 이제 이 패턴을 정규 표현식을 사용하여 ‘Pattern’ 매개변수와 함께 전송해 보겠습니다.

Select-String은 각 줄을 검색하기 위해 정규 표현식을 사용했습니다. 그 후, 모든 이름을 분리해야 합니다. 현재로서는 각 주소가 필요하지 않습니다. 이를 수행하기 위해 Select-String이 반환한 각 일치 객체의 Matches 속성을 사용할 것입니다.

PS> test | Select-String -Pattern '\|\w+ \w+\|' | foreach {$_.Matches}

출력:

{CODE_BLOCK_8}파워쉘 grep 3

이제 값 속성이 필요한 이름을 가지고 있지만 여전히 | 문자로 둘러싸여 있는 것을 볼 수 있습니다. 이는 정규 표현식 일치에 이름의 | 문자가 포함되었기 때문입니다.

파이프 문자는 여전히 필터에 포함되어야 하지만, 우리는 그것들이 일치로 반환되기를 원하지 않습니다. 정규 표현식 그룹이 하나의 방법입니다. 반환하고자 하는 결과는 정규 표현식 그룹을 나타내는 괄호로 둘러싸여 있습니다. 이 상황에서는 정규 표현식을 처음 이름과 마지막 이름을 나타내는 문자열로 다시 시도해 보겠습니다.

PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches}

출력:

파워셸 그렙 4

값에 | 문자가 표시되지만, 무엇보다도 그룹이 {0,1}로 변한 것을 볼 수 있습니다. 이는 Select-String이 그룹을 식별했음을 나타냅니다.

for 각 루프에 참조를 다시 삽입하여 이 그룹을 확인하겠습니다. 각 그룹 속성이 배열이기 때문에, 첫 번째 멤버를 괄호로 포함한 후 값 속성을 사용하여 참조할 수 있습니다.

PS> test | Select-String -Pattern '\|(\w+ \w+)\|' | foreach {$_.Matches.Groups[1].Value}

출력:

powershell grep 5

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.