【问题标题】:Extracting String Powershell提取字符串 Powershell
【发布时间】:2016-09-09 09:06:45
【问题描述】:

我正在尝试从 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

【问题讨论】:

    标签: powershell powershell-ise


    【解决方案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 }
    

    【讨论】:

      【解决方案2】:
      select-string -pattern "LOANKEY:(.*)\)" .\errorlog.txt | % {"$($_.matches.groups[1])"}
      

      那么你会得到你想要的。 参考这里:How to get the captured groups from Select-String?

      【讨论】:

      • @paweł-dyl 的回答也很棒,只需使用“更多”我们就可以保存变量定义:more .\errorlog.txt | % { [Regex]::Match($_, "(?&lt;=LOANKEY:)(\d+)").Value }
      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2011-02-28
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多