Избегайте разрывов строки при использовании-файла

Я становлюсь немного расстроенным на небольшом сценарии 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 ;-)

Любая справка значительно ценится.

Kevin

17
задан bitfrickler 20 April 2010 в 13:44
поделиться

2 ответа

Почему бы вам не использовать Add-Content ?

gci $logdir -rec *.txt | gc | select-string $pattern | add-content $csvpath

Вам не нужно указывать ширину и переключатель -append , размер файла по умолчанию не удваивается (хотя вы можете указать кодировку), и кажется, что нет проблем с пустыми строками как и у вас.

10
ответ дан 30 November 2019 в 13:20
поделиться

Помните, что 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
14
ответ дан 30 November 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: