![使用 Powershell 从文本文件中删除行](https://linux22.com/image/540033/%E4%BD%BF%E7%94%A8%20Powershell%20%E4%BB%8E%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E8%A1%8C.png)
我正在尝试从文本文件中删除特定行。文本文件只是一个列表,我想删除存在的特定条目。所以我有这样的:
$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。