因此,如果正则表达式只匹配主文件中每一行的一个条目,那么powershell脚本就能正常工作,但如果每行中有多个条目匹配,那么输出就不是预期的。我正在使用它: -
$FILE_RE = '^[^\:]*[^\.txt:]'
$TEXT_RE = '"(.*?)"'
$TEXT = (Get-Content .\masterfile.txt).ToUpper() |
ForEach-Object {
New-Object psobject -Property @{
fileName = [regex]::Matches($_, $FILE_RE).Value
Value = [regex]::Matches($_, $TEXT_RE).value
}
}
$TEXT | Select-Object fileName , Value | Sort-Object * -Unique |
Export-Csv TEXT.CSV -NoTypeInformation`
文件的数据和相应的正则表达式can be found here. “值”选项卡中的输出包含 System.Object [] ,其中包含2个值。我如何在 System.Object [] 中显示所有条目,并在第一列中显示相应的文件名。 预期的输出是: -
fileName Value
FILE1.TXT VALUE1
FILE1.TXT VALUE2
FILE2.TXT VALUE3
FILE2.TXT TEST STRING1
FILE3.TXT VALUE4
FILE3.TXT 3456789
FILE4.TXT VALUE5
FILE4.TXT TEXT1
FILE5.TXT VALUE6
FILE5.TXT LOREM IPSUM
FILE6.TXT VALUE7
答案 0 :(得分:1)
由于每行有几个$ TEXT_RE的发现,你需要存储文件并迭代查找。
"
$FILE_RE = '^[^:]+'
$TEXT_RE = '"([^ ].+?)"'
(Get-Content .\masterfile.txt).ToUpper() | ForEach-Object {
$File = [regex]::Matches($_, $FILE_RE).Value
ForEach ($Value in ([regex]::Matches($_, $TEXT_RE).value)) {
New-Object psobject -Property @{
fileName = $File
Value = $Value.Trim('"')
}
}
} | Select-Object fileName , Value | Sort-Object * -Unique |
Export-Csv .\TEXT.CSV -NoTypeInformation
Import-Csv .\TEXT.CSV
示例输出:
fileName Value
-------- -----
FILE1.TXT VALUE1
FILE1.TXT VALUE2
FILE2.TXT TEST STRING1
FILE2.TXT VALUE3
FILE3.TXT 3456789
FILE3.TXT VALUE4
FILE4.TXT TEXT1
FILE4.TXT VALUE5
FILE5.TXT LOREM IPSUM
FILE5.TXT VALUE6
FILE6.TXT VALUE7