使用PowerShell,如何按行号从文本文件中删除行?

使用PowerShell,如何按行号从文本文件中删除行?,powershell,Powershell,在PowerShell中,假设我想使用行号从10行文本文件中删除第5行,这是如何完成的?没有我希望的那么干净,但实现了以下技巧: $content = Get-Content foo.txt $content | Foreach {$n=1}{if ($n++ -ne 5) {$_}} > foo.txt 如果已安装,则可以使用Skip Object cmdlet使其更加完善: $content = Get-Content foo.txt $content | Skip -Index 4

在PowerShell中,假设我想使用行号从10行文本文件中删除第5行,这是如何完成的?

没有我希望的那么干净,但实现了以下技巧:

$content = Get-Content foo.txt
$content | Foreach {$n=1}{if ($n++ -ne 5) {$_}} > foo.txt
如果已安装,则可以使用Skip Object cmdlet使其更加完善:

$content = Get-Content foo.txt
$content | Skip -Index 4 > foo.txt
请注意,-Index参数是基于0的,这就是我使用4而不是5的原因。

我就是这样做的:

(cat SomeFile.txt) -replace (cat SomeFile.txt)[4],"" | sc SomeFile.txt -Force
或者以更易读的形式:

$LineNumber = 5
$Contents = Get-Content Somefile.txt
$Contents -replace $Contents[$LineNumber -1],"" | Set-Content Somefile.txt

虽然我同意基思的观点。如果您安装了PSCX模块,跳过对象可能非常有用。

这些文件的第5行是否有我们可以键入的唯一内容?每个文件中的行数都相同吗?您可以使用哪个版本的Powershell?这不太合适,因为它将替换整个文件中出现的所有$Contents[$LineNumber-1](可能是一个单词或一个句子)。此外,根据我的经验,它会留下一个空行,我最终得到一个充满空行的文本文件,我当前正在寻找一个解决方案,该解决方案不会用“”替换某些内容