我正在使用以下腳本遍歷數百個文本文件,查找其中的正則表達式的特定實例。我需要在數組中添加第二個數據點,它告訴我模式匹配的對象。需要輸出多行到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