如果行包含搜索模式,则使用Powershell从文件中提取文本(文件名)

时间:2013-06-26 18:00:10

标签: regex string powershell

我遇到了问题...我有一个内容类似的文件

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)......

现在我正在搜索可以提取此

的正则表达式

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试使用此代替Select-String

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

答案 2 :(得分:0)

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

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