【问题标题】:Extracting text (filename) out of a file with Powershell if line contains search pattern如果行包含搜索模式,则使用 Powershell 从文件中提取文本(文件名)
【发布时间】:2013-06-26 18:00:10
【问题描述】:

我有一个问题...我有一个文件,其中的内容看起来像

IMPORT ("$(#T_Company-BAG)\KSAKTE13","06141030.eou")
IMPORT ("$(#T_Company-Gesmbh)\KSAKTE13","06141032.eou")
IMPORT ("$(#T_Company-ITALIA)\KSAKTE13","06141038.eou")
IMPORT ("$(#T_Company-ITALIA)\KSAKTE13","06141045.eou")
IMPORT ("$(#T_Company-ITALIA)\RWRECH13","06141512.eou")

我要做的是提取最后引号内的文件名(*.eou),并且只提取包含字符串T_Company-ITALIA的文件名...

第一部分,提取包含搜索模式的所有行并不难......

gc -Path C:\Scripts\Easyarchiv\level2.ebt | Select-String -Pattern T_Company-ITALIA

但我不知道如何从已选择的行中仅获取文件名 (*.eou)...

现在我正在寻找一个可以提取这个的正则表达式

【问题讨论】:

    标签: regex string powershell


    【解决方案1】:

    这是一个不使用Select-String的选项:

    Get-Content file.txt | 
    where {$_ -match 'T_Company-ITALIA'} | 
    foreach { $_ -replace '^.+,"(.+)"\).*$','$1'}
    

    【讨论】:

    • 嗨,Shay...谢谢您的帖子...有了这段代码,我得到了我需要的行...您还知道我帖子第二部分的解决方案吗?! ?我需要提取每行中包含的文件名(06141038.eou)......这是一个带有 .eou 文件扩展名的 8 位数名称......所以我能够将这些文件名写入文件或在变量中使用它以进行进一步处理
    • 您应该使用我发布的示例获取文件名。 06141038.eou、06141045.eou和06141512.eou
    • 不幸的是没有......我得到了完整的线条
    • PS F:\scripts\Easyarchiv> 获取内容文件.txt |其中 {$_ -match 'T_Company-ITALIA'} | foreach { $_ -replace '^.+,"(.+) "\).+$','$1'} IMPORT ("$(#T_Company-ITALIA)\KSAKTE13","06141038.eou") IMPORT ( "$(#T_Company-ITALIA)\KSAKTE13","06141045.eou") 进口 ("$(#T_Company-ITALIA)\RWRECH13","06141512.eou")
    • 是的...它正在运行并仅返回文件名...非常感谢您的帮助
    【解决方案2】:

    试试这个而不是Select-String:

    ... | ? { $_ -match 'T_Company-ITALIA.*?,"(.*?)"' } | % { $matches[1] }
    

    【讨论】:

      【解决方案3】:

      如果您想远离正则表达式(可能难以阅读、调试和理解),您可以这样做:

      gc file.txt | 
        foreach { 
          $splitArray = $_ -split '"'; # split at the quotation marks
          if ($splitArray[1] -match "T_Company-ITALIA") 
            {$splitArray[3]}
        }
      

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 1970-01-01
        • 2017-11-29
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 2012-06-24
        相关资源
        最近更新 更多