我正在使用以下脚本遍历数百个文本文件,查找其中的正则表达式的特定实例。我需要在数组中添加第二个数据点,它告诉我模式匹配的对象。需要输出多行到CSV文件
在下面的脚本中,[Regex]::Matches($str, $Pattern) | % { $_.Value }
部件为每个文件返回多行,无法轻松输出到文件。
我想知道的是,我将如何输出一个2列的CSV文件,一列有文件名(应该是$_.FullName
),一列是正则表达式结果?我现在所在的代码在下面。
$FolderPath = "C:\Test"
$Pattern = "(?i)(?<=\b^test\b)\s+(\w+)\S+"
$Lines = @()
Get-ChildItem -Recurse $FolderPath -File | ForEach-Object {
$_.FullName
$str = Get-Content $_.FullName
$Lines += [Regex]::Matches($str, $Pattern) |
% { $_.Value } |
Sort-Object |
Get-Unique
}
$Lines = $Lines.Trim().ToUpper() -replace '[\r\n]+', ' ' -replace ";", '' |
Sort-Object |
Get-Unique # Cleaning up data in array
请显示样本输入以及与该输入对应的期望输出和实际输出。 –
我同意,因为“和一列与正则表达式结果”是非常混淆 –
可以说,脚本通过2个文件file1.txt和file2.txt搜索。正则表达式模式正在'测试'一词后面查找单词。如果文件中有多个实例,则正则表达式将返回多个结果。所以输出将是一个包含2列的csv文件;第1列是脚本找到结果的文件,第2列是来自正则表达式模式的实际匹配。因此,如果在file1.txt中有3个匹配,则脚本有3行,col1表示每行有file1.txt,col2是'match1','match2'等。 – shannonjk