我对我正在编写的一个小PowerShell脚本感到有点沮丧。
基本上,我循环遍历文本文件,根据正则表达式模式数组检查每一行。结果通过管道传递到文件外cmdlet,后者将结果追加到另一个文本文件中。
Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object {
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 }
我的问题是,我不能让文件外省略它在$csvpath后面的文件中创建的那些额外的换行符(每行后面三个)。我可以使用.NET框架类来实现相同的功能,但我更愿意使用纯PowerShell ;-)
任何帮助都是非常感谢的。
凯文
发布于 2010-04-20 19:37:36
为什么不使用Add-Content
?
gci $logdir -rec *.txt | gc | select-string $pattern | add-content $csvpath
您不需要指定宽度和-append
开关,默认情况下文件大小不是双倍的(尽管您可以指定编码),而且看起来像您这样的空行没有问题。
发布于 2010-04-20 15:22:12
请记住,Select-String输出的是MatchInfo对象,而不是字符串-如以下命令所示:
gci $logdir -r *.txt | gc | select-string $patterns | format-list *
在将MatchInfo对象输出到文件之前,您要求将其隐式呈现为字符串。出于某些我不明白的原因,这会导致输出额外的空行。您可以通过指定仅将Line属性输出到文件来修复此问题,例如:
gci $logdir -r *.txt | gc | select-string $patterns | %{$_.Line} |
Out-File $csvpath -append -width 1000
https://stackoverflow.com/questions/2675552
复制相似问题