get-content powershell игнорирует перевод строки - PullRequest
2 голосов
/ 23 ноября 2010

Когда вы используете set-content Set-Content C:\test.txt "test","test1", по умолчанию две предоставленные строки разделены новой строкой, но в конце файла также есть новая строка.

Как игнорировать эту новую строку или новую строку с пробелами при использовании Get-Content?

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Вы можете удалить пустую строку следующим образом:

Set-Content C:\test.txt "test",'',"test1"
Get-Content c:\test.txt | ? { $_ }

Тем не менее, он также удалит строку посередине.
Редактировать: На самом деле, когда я попробовал пример, я заметил, что Get-Content игнорирует последнюю пустую строку, добавленную Set-Content.

Я думаю, что ваша проблема в Set-Content. Если вы используете обходной путь с WriteAllText, он будет работать нормально:

[io.file]::WriteAllText('c:\test.txt', ("test",'',"test1" -join "`n"))

Вы передаете строку в качестве второго параметра. Вот почему я сначала соединил строки с помощью -join, а затем передал их методу.

Примечание: это не рекомендуется для больших файлов из-за неэффективной конкатенации строк.

0 голосов
/ 25 ноября 2010
Get-Content C:\test.txt | Where-Object {$_ -match '\S'}
0 голосов
/ 23 ноября 2010

это поведение по умолчанию, что Set-Content добавляет новую строку, потому что он позволяет вам устанавливать контент с массивами строк и получать их по одному на строку.В любом случае Get-Content игнорирует последнюю «новую строку» (если позади нет пробелов).Обойти Set-Content:

([byte[]][char[]] "test"), ([byte]13), ([byte]10) ,([byte[]][char[]] "test1") | 
   Set-Content c:\test.txt -Encoding Byte

или использовать намного проще [io.file]::WriteAllText

Можете ли вы указать точную ситуацию (или код)?

, например, если хотитеигнорировать последнюю строку при получении контента это будет выглядеть так:

$content = Get-Content c:\test.txt
$length = ($content | measure).Count
$content = $content | Select-Object -first ($length - 1)

, но если вы просто сделаете:

"test","test1" | Set-Content C:\test.txt 
$content = Get-Content C:\test.txt 

$content переменная содержит два элемента: "test","test1"

...