Подтвердить что ты не робот

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

Я немного разочаровываюсь в небольшом PowerShell script, который я пишу.

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

Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { 
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 }

Моя проблема в том, что я не могу получить out-file, чтобы опустить те дополнительные разрывы строк, которые он создает в файле за $csvpath (по три после каждой строки). Я мог бы использовать классы .NET Framework для достижения того же, но я предпочел бы придерживаться чистой PowerShell; -)

Любая помощь очень ценится.

Кевин

4b9b3361

Ответ 1

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

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

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

Ответ 2

Имейте в виду, что 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