如何在 PowerShell 中从文本文件中删除一行?

5

突然我有冲动学习 Powershell。目前我可以导入文本文件,创建文本文件和添加内容到文件中,但是是否有一种方法可以从文件中删除元素?例如,如果我有一个文本文件:

test.txt

Quick
Brown
Fox

我可以使用$textFile = Get-Content -Path ".\test.txt"导入文件

并且我可以打印每个元素并将它们添加到一个新文件中:

foreach($line in $textFile)
{
    Write-Host $line
    Add-Content -Path ".\output.txt" -Value $line
}

但是我该如何从test.txt文件中删除或移除一个元素(一行)呢?我搜索了解决方案,但只得到希望删除空行的条件、删除整个文件的结果,或者如何在C#中实现。我认为它应该像先前的命令一样直观。

感谢您的反馈!

1个回答

6

这个帖子为例,它通过保留不包含特定内容的行来删除行。

您可以通过保留不想删除的行来执行同样的操作。

Get-Content .\text.txt | Where-Object {$_ -notmatch 'the-word-in-specific-line'} | Set-Content out.txt

因此,如果您想删除包含字符串Brown的行:

Get-Content .\test.txt | Where-Object {$_ -notmatch 'Brown'} | Set-Content out.txt

1
这个方法对我来说有点靠不住。有时它能正常工作,但有时候 PowerShell 就好像完全忽略了它一样。 - pctopgs
你能描述一下它不起作用的情况吗? - Eugene
Powershell 似乎忽略了 " Where-Object {$_ -notmatch 'Brown'} " 这一部分,只是复制整个内容。 - pctopgs
@pctopgs 如果您能提供要从中删除行的文件以及您使用的具体脚本,我们将不胜感激。 - Eugene
只要搜索字符串不包含括号,这对我来说很有效 - 我不理解为什么会出现这种情况。它是一个单引号字符串,所以为什么要解析它呢?以下操作失败:Get-Content .\prefs.js | Where-Object {$_ -notmatch 'user_pref("calendar.registry.'} | Set-Content prefs.js - Philippp
-match 和 -notmatch 需要一个正则表达式。 - Doug Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接