使用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 

该命令的问题是我可能有一个string,如“abc”,“abcd”或“abcde”。 如果我在引号中有“abc”,它会删除任何包含“abc”的行,而不仅仅是一个完全匹配。我真的吮吸正则expression式,所以我不知道如何指定一个正确的string。

任何build议如何做到这一点?

这可以用一个单行来完成:

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

请注意, ^意味着“行的开始”和$意味着行的结束。

你得到了大部分。

 $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 } } 

它以与您不同的方式使用out-file,但它应该保留CR。

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

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