我正试图从文本文件中删除特定的行。 文本文件只是一个列表,我想删除特定的条目,如果他们存在。 所以我有这个:
$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