2010-11-23 2 views
2

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

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

ответ

1

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

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

В [` WriteAllLines`] (http://msdn.microsoft.com/en-us/library/system.io.file.writealllines.aspx) метод работает с коллекциями, избегая необходимости `-join` массива в одну строку:` [IO.File] :: WriteAllLines ('c: \ test.txt', ("test", '', "Test1")) ` – 2011-07-03 14:53:32

0

По умолчанию поведение 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 

$ содержимое переменной содержит два пункта: "тест », "test1"

0
Get-Content C:\test.txt | Where-Object {$_ -match '\S'} 
Смежные вопросы