Ответ 1
Это можно объяснить тем, что результат Get-Content Foo.txt | Select-String "a"
Get-Content Foo.txt | Select-String "a"
имеет тип MatchInfo
, это не string
.
просто тест:
Get-Content Foo.txt | Select-String "a" | Format-list *
Попробуйте этот небольшой эксперимент. Создайте файл Foo.txt
с очень длинной строкой текста (например, длиной 500 символов):
// Foo.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
Выполните следующую команду:
$ Get-Content Foo.txt | Select-String "a" | Out-File Foo2.txt
Вы увидите, что длинная строка строки была разбита на более мелкие строки в Foo2.txt
. Длина каждой меньшей строки такая же, как и ширина консоли.
Почему Out-File разбивает длинную строку на меньшую строку, когда вывод не направляется на консоль?
И почему Out-File не разбивает строки для следующей команды?
$ Get-Content Foo.txt | Out-File Foo3.txt
Это можно объяснить тем, что результат Get-Content Foo.txt | Select-String "a"
Get-Content Foo.txt | Select-String "a"
имеет тип MatchInfo
, это не string
.
просто тест:
Get-Content Foo.txt | Select-String "a" | Format-list *
$ Get-Content Foo.txt | Select-String "a" | Add-Content Foo2.txt
Используйте Add-Content
(или вы можете использовать Set-Content
если вы хотите перезаписать файл).
Вы можете настроить, где Out-File разбивает строки, используя параметр -width
$ Get-Content Foo.txt | Select-String "a" | Out-File -width 1000 Foo2.txt