2013-06-26 17 views
1

从来就麻烦了......的了从来就一个文件,其中内容看起来像提取文本(文件名)进行使用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)从已选择行...

现在I'm寻找一个正则表达式,可以提取该

回答

1

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

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

喜吉文...谢谢您为您的文章 –

+0

吉文喜.. 。感谢你的帖子...有了这段代码,我得到了我需要的几行...你也知道我的文章的第二部分的解决方案吗?!?我需要提取包含在每行中的文件名(06141038.eou)...这是一个带有.eou文件扩展名的8位数字名称。所以,我可以将这些文件名写入文件或将其用于进一步处理的变量 –

+0

您应该通过我发布的示例获取文件名。 06141038.eou, 06141045.eou和06141512.eou –

0

试试这个而不是Select-String

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

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

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