我遇到了问题...我有一个内容类似的文件
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
)......
现在我正在搜索可以提取此
的正则表达式答案 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]}
}