我想使用正则表达式从输入文件中捕获两个特定数据:
$reg = [regex]"(?<Name>^Name:.*)|(?<Id>^Id:.*)"
gci C:\test\*.txt | Get-Content | Select $reg -allmatches | Select -Expand Matches|
...
new-object psobject -property @{Name=$n; Id=$i}
...
Select-Object Name, Id | Export-Csv c:\info.csv –NoTypeInformation
我遇到的问题是某些文件没有“Id”条目。如果任何文件中没有“Id”条目,则它不会显示在导出的csv文件中。如果有人能帮我提出解决方案,我将不胜感激。
C:\test\file1.txt
包含:
Name: Sturgeon Ocean
Alias: Socean
Id: 384932
Address: 3600 Caviar
Street, Pacific beach
...
Cell: 389-394-3843
...
答案 0 :(得分:0)
未经测试,但我认为这应该有效:
Foreach ($file in gci C:\test\*.txt)
{
$Record = New-object PSObject -Property @{Name=$null;ID=$null}
Foreach ($line in Get-Content $file.FullName)
{
switch -Regex ($_)
{
'^Name' {$Record.Name = ($_ -replace '^Name:(.+)$','$1').Trim()}
'^ID' {$Record.ID = ($_ -replace '^ID:(.+)$','$1').Trim()}
}
}
$Record
}
无开关
$reg = [regex]"(^Name:.*)|(^Id:.*)"
gci c:\new*.txt |
foreach {
$matched = (gc reg_test0.txt) -match $reg -replace '^.+:\s*',''
new-object psobject -Property @{Name=$matched[0];ID=$matched[1]}
}| Select Name,Id | Export-Csv c:\new\info.csv -NoTypeInformation