2
我需要構建一個腳本,它從各種日誌文件中讀取數據並使用powershell將數據放入csv中。輸出csv應該具有第一列作爲日誌文件的名稱,第二列應該包含日誌文件中的一些特定內容。第二列的內容不應該從同一文件出現兩次,這就是爲什麼第一列包含日誌文件的名稱。我設法提取兩種數據類型,但我的腳本只匹配使用正則表達式的第一個匹配,然後將結果放入csv中。PowerShell中的正則表達式僅匹配行的第一個匹配
我使用以下腳本:
$test = gc .\datalog.txt | Select-String -Pattern '"\w:\\\w+\\' -NotMatch |
ForEach-Object {
New-Object psobject -Property @{
D_no = [regex]::Matches($_, '^[^\:]*[^\.log:]')
D_name = [regex]::Matches($_, '((?!\\)\w+\S+(?=\\)|(\w:\w+)[^"])').Groups[1].value
}
}
$test | Select-Object D_no, D_name | Export-Csv abc.csv -NoTypeInformation
D_name在我的劇本只匹配在哪裏我的預期操作是捕獲使用D_name正則表達式的所有條目行的第一場比賽。然而正則表達式工作正常,當我使用
Select-String -allmatches '^[^\:]*[^\.log:]|(?!\\)\w+\S+(?=\\)|(\w:\w+)[^"]').Matches.Value
但這給了我的數據在一個單一的列D_no和D_name。 The sample data can be found here
但是現在D_name中的值只出現在一行中,而不是每個單元格中的單個值 – n00b
首先,在您的問題中,您說「第二列的內容」。這樣對嗎?其次,export-csv不支持任意數量的列。它檢查管道中的第一個對象,並僅包含所有其他對象的屬性。您可以嘗試通過導出匹配以逗號分隔的字符串來模擬export-csv(CSV格式,實際上) –