【发布时间】:2017-11-17 20:35:11
【问题描述】:
我需要构建一个脚本,该脚本从各种日志文件中读取数据并使用 powershell 将数据放入 csv 中。输出 csv 应将第一列作为日志文件的名称,第二列应包含日志文件中的某些特定内容。第二列的内容不应在同一文件中出现两次,这就是第一列包含日志文件名。我已设法提取这两种数据类型,但我的脚本仅使用正则表达式模式匹配第一个匹配项,然后将结果放入 csv。
我正在使用以下脚本:
$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
【问题讨论】:
标签: regex powershell csv