PowerShell 선택 문자열을 사용하여 파일에서 두 개 이상의 패턴을 찾는 방법은 무엇입니까?
디렉터리에 있는 파일에 있는 문자열을 두 개 이상 검색하고 싶지만 "select-string-pattern"을 사용하는 것은 도움이 되지 않았습니다.누가 어떻게 하는지 보여줄 수 있습니까?
예: "VendorEnquiry" 및 "Failed" 단어가 포함된 C:\Logs 및 오전 11:30 정도의 Log time에서 모든 파일을 검색합니다.파일의 구조가 다를 수 있습니다(예: 태그 이름이 다른 경우 등).
... <methodException>VendorEnquiry</methodException> ...
... <logTime>13/10/2010T11:30:04 am</logTime> ...
... <status>Failed</status> ...
... <serviceMethodException>VendorEnquiry</serviceMethodException> ...
... <logTime>13/10/2010</logTime> ...
... <serviceStatus>Failed</serviceStatus> ...
감사해요.
두 단어를 순서대로 일치시키려면 다음을 사용합니다.
gci C:\Logs| select-string -pattern '(VendorEnquiry.*Failed)|(Failed.*VendorEnquiry)'
VendorQuery 다음에 항상 Failure(실패)가 나타나면 다음을 사용합니다.
gci C:\Logs| select-string -pattern '(VendorEnquiry.*Failed)'
각 파일에서 여러 일치 항목을 검색하기 위해 Select-String 호출의 순서를 지정할 수 있습니다.
Get-ChildItem C:\Logs |
where { $_ | Select-String -Pattern 'VendorEnquiry' } |
where { $_ | Select-String -Pattern 'Failed' } |
...
각 단계에서 현재 패턴을 포함하지 않는 파일이 필터링되어 최종 파일 목록에 검색어가 모두 포함되도록 합니다.
각 Select-String 호출을 수동으로 작성하는 대신 필터를 사용하여 여러 패턴을 일치시킬 수 있습니다.
filter MultiSelect-String( [string[]]$Patterns ) {
# Check the current item against all patterns.
foreach( $Pattern in $Patterns ) {
# If one of the patterns does not match, skip the item.
$matched = @($_ | Select-String -Pattern $Pattern)
if( -not $matched ) {
return
}
}
# If all patterns matched, pass the item through.
$_
}
Get-ChildItem C:\Logs | MultiSelect-String 'VendorEnquiry','Failed',...
이제, 예제의 "Log time about 11:30 am" 부분을 만족시키려면 각 장애 항목에 해당하는 로그 시간을 찾아야 합니다.이 방법은 파일의 실제 구조에 크게 의존하지만 "대략"에 대한 테스트는 비교적 간단합니다.
function AboutTime( [DateTime]$time, [DateTime]$target, [TimeSpan]$epsilon ) {
$time -le ($target + $epsilon) -and $time -ge ($target - $epsilon)
}
PS> $epsilon = [TimeSpan]::FromMinutes(5)
PS> $target = [DateTime]'11:30am'
PS> AboutTime '11:00am' $target $epsilon
False
PS> AboutTime '11:28am' $target $epsilon
True
PS> AboutTime '11:35am' $target $epsilon
True
배열에서 여러 패턴을 지정할 수 있습니다.
select-string VendorEnquiry,Failed C:\Logs
-not match와 함께 작동합니다.
select-string -notmatch VendorEnquiry,Failed C:\Logs
언급URL : https://stackoverflow.com/questions/3920383/how-to-use-powershell-select-string-to-find-more-than-one-pattern-in-a-file
'source' 카테고리의 다른 글
jdiv가 이 텍스트를 포함하는 경우 텍스트의 해당 부분을 바꿉니다. (0) | 2023.09.13 |
---|---|
Spring Boot 1.4 MVC 테스트에서 @WebMvcTest로 MockMvc 설정 (0) | 2023.09.13 |
Excel을 위해 vba에서 다차원 배열 변수를 초기화하는 방법 (0) | 2023.09.13 |
XML 파일을 XmlDocument로 읽기 (0) | 2023.09.13 |
Spring boot 설정 및 log4j2 설정 방법은? (0) | 2023.09.13 |