2016-10-09 3 views
1

У меня есть файл sample.txt, где я хотел бы удалить содержимое, за исключением его первой верхней строки.Удалить содержимое, сохраняя первую верхнюю строку powershell

Мой файл sample.txt выглядит следующим образом:

1.dslkjfladsdjgmvjfgmldskbm;sldkvmg,;sdlmg;msj,;sdrl 
2.dlkjfsadfjmsal;jsalv;dsvmdsfkgmrg,pvtpvhtphb[h.[y 
3.fljsafckg,ksd,v;vyklt;vlkbmyulnmktr,ouf,f/.n, 
4.dflcajsmglsdv;ks'ítb;pjk.'gpjnuk. uo.hulmk,vgjhumk.'l 

Я хотел бы результат вывода выглядеть следующим образом:

1.dslkjfladsdjgmvjfgmldskbm;sldkvmg,;sdlmg;msj,;sdrl 

Я попробовал эти команды, но выход очищает весь файл.

Clear-Content C:\sample.txt | where { $_.length -gt 2}| Set-Content C:\sample.txt 

Clear-Content C:\sample.txt | Select -first 2 | Set-Content C:\sample.txt 

Не могли бы вы сообщить, что мне не хватает? Благодаря

ответ

4

От the documentation for the Clear-Content cmdlet:

Clear-Content командлет удаляет содержимое элемента, например, удаление текста из файла, но он не удаляет элемент. В результате элемент существует, но он пуст.

С помощью Clear-Content вы удаляете содержимое sample.txt, не читая его. Вместо этого, вы хотите использовать Get-Content:

(Get-Content C:\sample.txt -First 1) | Set-Content C:\sample.txt 

Использование параметра -First (псевдоним -TotalCount) из Get-Content cmdlet работ так же, как Select-Object -First но позволяет Get-Content прекратить чтение файла, как только у нас есть количество строк нам нужно; 1, а не 2, передается для извлечения только первой строки. Обратите внимание, что вызов Get-Content должен быть окружен в круглых скобках иначе Set-Content will complain that the file is already open. Кроме того, вы можете прочитать содержимое файла в переменную первом ...

$firstLine = Get-Content C:\sample.txt -First 1 
$firstLine | Set-Content C:\sample.txt 

... или «безопасную перезапись», выводя отфильтрованный текст в другой файл, а затем перезаписать оригинальный .. .

Get-Content C:\sample.txt -First 1 | Set-Content C:\sample.txt.tmp 
Move-Item C:\sample.txt.tmp C:\sample.txt -Force 
+0

Не забудьте 'Get-Content -TotalCount 1' –

+0

@ MathiasR.Jessen Хороший вопрос. Я знал, что существует способ более эффективно ограничивать количество строк, прочитанных, но искал их в [неправильном месте] (https://technet.microsoft.com/library/hh847788.aspx). – BACON

0

(дс C: \ sample.txt | выберите -first 1) | из файла C: \ sample.txt

0

Спасибо за помощь, я, наконец, удается применять следующие коды:

(Get-Content C:/sample.txt -TotalCount 1) | Set-Content C:\sample.txt

Благодаря Ману

+0

Я не собираюсь лоббировать свой ответ ... но это то же самое, что и мой первый фрагмент кода. '-First 'является псевдонимом параметра' -TotalCount' 'Get-Content', который указан в моем ответе. – BACON

Смежные вопросы