2016-09-09 1 views
2

Im пытается извлечь loankey из следующего текста в PowerShell:извлекая Строка Powershell

Test\errorlog.txt:4::293:StepName:WARNING StepTime:9/9/2016 9:01:06 AM StepMessage:ERROR(KEY1:7798850,LOANKEY:11111)::POST PAYMENT StepNotes:[[WARNING]] 
Test\errorlog.txt:8::299:StepName:WARNING StepTime:9/9/2016 9:01:11 AM StepMessage:ERROR(KEY1:7798870,LOANKEY:54321)::POST PAYMENT StepNotes:[[WARNING]] 
Test\errorlog.txt:12::305:StepName:WARNING StepTime:9/9/2016 9:01:14 AM StepMessage:ERROR(KEY1:7798863,LOANKEY:12345)::POST PAYMENT StepNotes:[[WARNING]] 

я в настоящее время получил следующее отфильтровывать ошибку входа вниз, как вы его видите выше:

cls 

$path = 'C:\Test\errorlog.txt' 

$script = select-string -pattern "LOANKEY:" $path 

ответ

0
select-string -pattern "LOANKEY:(.*)\)" .\errorlog.txt | % {"$($_.matches.groups[1])"} 

, тогда вы получите то, что хотите. ссылка здесь: How to get the captured groups from Select-String?

+0

Ответ от @ paweł-dyl также велик, просто с «большим» мы можем сохранить определение переменной: 'more. \ Errorlog.txt | % {[Regex] :: Match ($ _, "(? <= LOANKEY:) (\ d +)"). Значение} ' – proQuest

1

Упомянув вход вы можете использовать регулярное выражение:

$txt = "Test\errorlog.txt:4::293:StepName:WARNING StepTime:9/9/2016 9:01:06 AM StepMessage:ERROR(KEY1:7798850,LOANKEY:11111)::POST PAYMENT StepNotes:[[WARNING]]", 
"Test\errorlog.txt:8::299:StepName:WARNING StepTime:9/9/2016 9:01:11 AM StepMessage:ERROR(KEY1:7798870,LOANKEY:54321)::POST PAYMENT StepNotes:[[WARNING]]", 
"Test\errorlog.txt:12::305:StepName:WARNING StepTime:9/9/2016 9:01:14 AM StepMessage:ERROR(KEY1:7798863,LOANKEY:12345)::POST PAYMENT StepNotes:[[WARNING]]" 

$txt | % { [Regex]::Match($_, "(?<=LOANKEY:)(\d+)").Value } 
+0

Пятно на это спасибо. – NickBuckley