1

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

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从已选择的行中仅获取文件名()...

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

4

3 回答 3

1

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

Get-Content file.txt | 
where {$_ -match 'T_Company-ITALIA'} | 
foreach { $_ -replace '^.+,"(.+)"\).*$','$1'}
于 2013-06-26T19:57:16.027 回答
0

试试这个而不是Select-String

... | ? { $_ -match 'T_Company-ITALIA.*?,"(.*?)"' } | % { $matches[1] }
于 2013-06-26T18:18:49.280 回答
0

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

gc file.txt | 
  foreach { 
    $splitArray = $_ -split '"'; # split at the quotation marks
    if ($splitArray[1] -match "T_Company-ITALIA") 
      {$splitArray[3]}
  }
于 2013-06-27T02:10:51.410 回答