使用 Powershell 从文本文件中删除行

使用 Powershell 从文本文件中删除行

我正在尝试从文本文件中删除特定行。文本文件只是一个列表,我想删除存在的特定条目。所以我有这样的:

$f=${path_to_file}
for($i = 0; $i -le $f.length; $i++)
{
    if ($f[$i] -eq "text_to_be_deleted")
    {
        $f[$i]=$null
    }
}
${path_to_file}=$f

问题是这会从文本文件中删除所有回车符。我尝试了以下操作:

(type path_to_file) -notmatch "text_to_be_deleted" | out-file path_to_file

该命令的问题在于,我可能有一个字符串,例如“abc”、“abcd”或“abcde”。如果我在引号中包含“abc”,它会删除包含“abc”的任何行,而不仅仅是完全匹配的行。我对正则表达式真的很差,所以我无法弄清楚如何指定这个字符串。

关于如何做到这一点有什么建议吗?

答案1

这可以通过一行代码实现:

(type path_to_file) -notmatch "^text to be deleted$" | out-file path_to_file

请注意,^意思是“行的开始”,而$意思是行的结束。

答案2

如果您不介意使用非 PowerShell 工具:

findstr /V /C:"abcd" file.txt > file_new.txt

答案3

你已经掌握了大部分内容。

$f=${path_to_file}
for($i = 0; $i -le $f.length; $i++)
{
    ## If NOT EQUAL to text-to-be-deleted, print to file
    if ($f[$i] -ne "text_to_be_deleted")
    {
        ## write to file, preserving carriage returns.
        out-file -filepath ${path_to_file} -InputObject $f[$i] -append
    }
}

它使用输出文件的方式与您不同,但它应该保留 CR。

相关内容