如何将Select-String结果输出到文件且去除行内换行
修复PowerShell日志提取的行内换行问题
原始代码
$ccToSearch =@('"1008-0000108812"', "1008-0000105138", "1008-0000120485") $ccToSearch = $ccToSearch -split ',' | ForEach-Object { $_.Trim() } $results5 = Select-String -Path "C:\Logs\tm1s202205*.log" -Pattern $ccToSearch $results5 | Out-File -FilePath "C:\Users\User\Desktop\log.txt"
当前问题
提取后的日志出现行内换行,部分内容被拆分到下一行:
tm1s20220615160000.log:622:"","20220615152345","20220615152345","N","9.279340000000001e-003","0","OPEX","1008-0000108812","1008-0000750055","5760012285","Input","5555","2022","Cur rent Cycle","Other","Direct Input","Value in Millions","" tm1s20220615160000.log:623:"","20220615152345","20220615152345","N","1.975e-002","0","OPEX","1008-0000108812","1008-0000750055","5760012202","Input","5555","2022","Current Cycle","Other","Direct Input","Value in Millions",""
期望效果
每行完整显示,无行内换行:
tm1s20220615160000.log:622:"","20220615152345","20220615152345","N","9.279340000000001e-003","0","OPEX","1008-0000108812","1008-0000750055","5760012285","Input","5555","2022","Current Cycle","Other","Direct Input","Value in Millions","" tm1s20220615160000.log:623:"","20220615152345","20220615152345","N","1.975e-002","0","OPEX","1008-0000108812","1008-0000750055","5760012202","Input","5555","2022","Current Cycle","Other","Direct Input","Value in Millions",""
解决方案
问题根源:Select-String返回的是MatchInfo对象,直接用Out-File输出时会默认截断长行;同时原始日志可能包含软换行符,导致内容被拆分。
修改后的代码
$ccToSearch = @('"1008-0000108812"', "1008-0000105138", "1008-0000120485") # 原代码中-split ','是多余操作,数组本身无需拆分,直接使用即可 # $ccToSearch = $ccToSearch -split ',' | ForEach-Object { $_.Trim() } $results5 = Select-String -Path "C:\Logs\tm1s202205*.log" -Pattern $ccToSearch # 提取完整行内容,移除行内软换行符,指定宽度避免自动截断 $results5.Line | ForEach-Object { $_ -replace '\r?\n', '' } | Out-File -FilePath "C:\Users\User\Desktop\log.txt" -Width 2000
关键说明
-replace '\r?\n', '':移除行内的软换行符(兼容Windows和Unix换行格式)-Width 2000:指定输出宽度,避免PowerShell自动截断长行,可根据日志实际长度调整数值- 移除了原代码中多余的数组拆分步骤,因为
$ccToSearch本身就是字符串数组,直接传入Select-String即可
内容的提问来源于stack exchange,提问作者Luiz
相关产品推荐
相关产品推荐

