HOWTO · PowerShell
PowerShell을 사용하여 파일에 특정 문자열이 포함되어 있는지 확인하는 방법
Windows PowerShell을 사용하여 텍스트 파일에 특정 문자열이 포함되어 있는지 확인할 수 있습니다.
이 페이지의 내용
특정 문자열을 텍스트 파일 내에서 검색하는 것은 Windows PowerShell 작업 시 일반적인 작업입니다. Unix와 Linux 환경에서는 믿을 수 있는 grep 명령을 사용하는 반면, PowerShell은 Select-String, Get-Content 및 Get-ChildItem cmdlet을 사용하여 대안적인 접근 방식을 제공합니다.
이 기사에서는 PowerShell을 사용하여 텍스트 파일에서 문자열을 찾는 다양한 방법을 탐구할 것입니다.
PowerShell에서 Select-String을 사용하여 파일이 특정 문자열을 포함하는지 확인하기
우리 기계에 Demo.txt 파일이 있다고 가정하고, 그 안에서 문자열 Demonstration을 찾고 싶습니다.
다음은 이를 수행하는 PowerShell 스크립트입니다:
Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'
이 스크립트에서는 Select-String을 사용하여 -Path 매개변수로 파일의 위치를 지정하고 -Pattern 매개변수로 우리가 찾고 있는 문자열을 지정합니다.
파일이 지정된 패턴('Demonstration')을 포함하고 있으면, 콘솔은 파일 이름, 줄 번호, 문자열이 포함된 줄을 출력합니다.
출력:
C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
위의 출력은 전체 경로가 포함된 Demo.txt 파일과 우리의 문자열이 포함된 줄(줄 1) 및 문자열 자체(This is purely for demonstration)를 보여줍니다.
파일이 문자열을 포함하는지 여부만 알면 되는 경우에는 스크립트를 다음과 같이 수정할 수 있습니다:
$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"
if ($Knw -ne $null) {
echo Contains String
}
else {
echo Does not Contain String
}
이 스크립트에서 $Knw라는 변수를 정의하였으며, 이는 Select-String을 사용하여 지정된 경로에 있는 파일에서 검색된 문자열 "Demonstration"의 결과를 포함합니다. 그런 다음, 변수 $Knw가 $null이 아닌지 확인하여 파일에서 일치하는 항목이 발견되었음을 의미합니다.
일치하는 항목이 발견되면 "Contains String."을 출력하고, 발견되지 않으면 "Does not Contain String."을 출력합니다.
출력:
Contains String
파일이 "Demonstration" 패턴을 포함하고 있으므로, 출력은 Contains String이 표시됩니다.
PowerShell에서 Get-Content를 사용하여 파일이 특정 문자열을 포함하는지 확인하기
Get-Content는 지정된 경로의 파일 내용을 가져오고 파일 내용을 읽어 문자열 객체를 반환하는 cmdlet입니다. Demo.txt 파일에서 Get-Content를 사용하려면 아래의 스크립트를 사용할 것입니다:
Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"
이 스크립트에서는 Get-Content를 사용하여 -Path 매개변수로 지정된 Demo.txt 파일의 내용을 읽고, 그 결과를 Select-String 명령으로 전달하여 -Pattern 매개변수를 사용하여 Demonstration 문자열을 찾습니다.
출력:
This purely for demonstration
문자열의 존재 여부만 확인하고 싶은 경우, 아래의 스크립트를 사용할 수 있습니다:
If (Get-Content C:\Users\pc\Demo\Demo.txt | % { $_ -match "Demonstration" }) {
echo Contains String
}
else {
echo Does not Contains String
}
이 스크립트에서는 Get-Content를 사용하여 C:\Users\pc\Demo\Demo.txt에 위치한 파일의 데이터를 읽고, 파이프라인(|)을 통해 파일의 각 줄을 하나씩 처리합니다. %{} 블록 내부에서는 -match 연산자를 사용하여 각 줄이 문자열 "Demonstration"을 포함하는지 확인합니다.
파일의 어느 한 줄이라도 "Demonstration"을 포함하고 있다면 "Contains String"을 출력하고, 포함되지 않으면 "Does not Contains String"을 출력합니다.
출력:
Contains String
파일이 지정된 문자열("Demonstration")을 포함하고 있으므로, 우리는 Contains String을 출력으로 받습니다.
특정 문자열을 포함하는 여러 파일 확인하기
50개 이상의 텍스트 파일이 있고, 그 모든 파일에서 문자열을 검색하려고 한다고 가정해 봅시다. 이를 수행하는 두 가지 방법에 대해 논의할 것입니다.
PowerShell에서 Get-ChildItem 및 Search-String 사용하기
우리는 Get-ChildItem과 Select-String cmdlet을 사용할 수 있습니다. Get-ChildItem cmdlet은 검색 기준에 따라 하나 이상의 파일을 찾습니다.
예를 들어 보겠습니다. Demo 폴더에 50개 이상의 텍스트 파일이 있다고 가정하고, 이 스크립트를 사용하여 그 모든 파일에서 문자열 Demonstration을 검색할 수 있습니다:
Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'
이 스크립트에서는 지정된 디렉터리(-Path)와 하위 디렉터리(-Recurse)에서 파일 목록을 나열하기 위해 Get-ChildItem을 사용합니다. 파이프 연산자(|)는 파일 목록을 Select-String cmdlet에 전달합니다.
마지막으로, 우리는 각 파일에서 특정 패턴인 'Demonstration'을 검색하기 위해 Select-String을 사용합니다.
콘솔은 문자열을 포함하고 있는 파일 이름, 줄 번호, 그리고 문자열이 포함된 줄을 출력합니다.
출력:
C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem
PowerShell에서 Select-String 사용하기
여러 파일에서 특정 문자열을 확인하기 위해 Select-String만 사용할 수도 있습니다.
Select-String -Path C:\Users\pc\Demo\*.txt -Pattern 'Demonstration'
이 스크립트에서는 -Path 매개변수에서 와일드카드(*)를 사용하여 Demo 폴더의 모든 텍스트 파일을 검색합니다. Select-String cmdlet은 모든 일치하는 파일에서 문자열을 검색합니다.
출력:
C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem
위와 동일하게, 콘솔은 문자열을 포함하고 있는 파일 이름, 줄 번호, 그리고 문자열이 포함된 줄을 출력합니다.
결론
Windows PowerShell은 텍스트 파일 내에서 문자열을 효율적으로 검색할 수 있는 도구 세트를 제공합니다. Select-String, Get-Content, 또는 Get-ChildItem과 Select-String의 조합을 선호하는지 간에, 파일 내에서 데이터를 쉽게 찾아 조작할 수 있습니다.
이 cmdlet을 통해 필요한 정보를 찾는 데 아무런 문제가 없을 것이며, PowerShell에서 텍스트 파일 검색이 수월해질 것입니다.