删除内容,同时保留第一行的 powershell

Man*_*287 1 powershell

我有一个 sample.txt 文件,我想在其中删除内容,除了第一行。

我的 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
Run Code Online (Sandbox Code Playgroud)

我希望输出结果如下所示:

1.dslkjfladsdjgmvjfgmldskbm;sldkvmg,;sdlmg;msj,;sdrl
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这些命令,但输出会清除整个文件。

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
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我错过了什么吗?谢谢

BAC*_*CON 5

cmdlet的文档中Clear-Content

Clear-Content cmdlet 会删除项目的内容,例如从文件中删除文本,但不会删除项目。结果,该项目存在,但它是空的。

通过使用Clear-Content您正在删除内容sample.txt而不阅读它。相反,您想使用Get-Content

(Get-Content C:\sample.txt -First 1) | Set-Content C:\sample.txt
Run Code Online (Sandbox Code Playgroud)

使用cmdlet-First参数(别名-TotalCount)的工作方式与允许在获得所需行数后立即停止读取文件的工作方式大致相同;, not , 被传递以仅检索第一行。请注意,调用必须用括号括起来,否则会提示文件已经打开。或者,您可以先将文件的内容读入变量...Get-ContentSelect-Object -FirstGet-Content12Get-ContentSet-Content

$firstLine = Get-Content C:\sample.txt -First 1
$firstLine | Set-Content C:\sample.txt
Run Code Online (Sandbox Code Playgroud)

...或者先将过滤后的文本输出到另一个文件,然后覆盖原始文件,从而进行“安全覆盖”...

Get-Content C:\sample.txt -First 1 | Set-Content C:\sample.txt.tmp
Move-Item C:\sample.txt.tmp C:\sample.txt -Force
Run Code Online (Sandbox Code Playgroud)