我有这个:set myvar = ^J | FIND /N /I "texttolookfor" %WINDIR%\system32\drivers\etc\hosts
现在我有了它所定义的文本的行
我怎样才能从文件中删除这些行?
我知道我可以越过界限,FOR
但删除部分对我来说仍然很棘手
我读过findstr
,它应该会更好,但也找不到任何可以删除的东西
现在我读到
FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > newfile
它将文件保存到没有找到的字符串的新文件中...但添加了
“-----------------%WINDIR%\system32\drivers\etc\hosts”
一开始,但是当我尝试
FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > %WINDIR%\system32\drivers\etc\hosts
这是行不通的...
答案1
您的命令:
FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > newfile
添加------------------%WINDIR%\system32\drivers\etc\hosts
到文件顶部,因为这是默认输出的一部分FIND
。尝试不使用重定向并查看。
FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts
---------- C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
...
TYPE
可以用来 cat 文件,重定向其输出通过 FIND
,并且它不应该显示文件/路径:
TYPE %WINDIR%\system32\drivers\etc\hosts | FIND /V "texttolookfor"
当然,这也可以重定向到新文件:
TYPE %WINDIR%\system32\drivers\etc\hosts | FIND /V "texttolookfor" > newfile
答案2
假设您想清除包含xyz
以下命令的任何行,它将执行您需要的操作。
grep -v xyz inputfile.txt > outputfile.txt
如果您想要匹配整行,也可以使用正则表达式。正如 MDMarra 在评论中所说,请解释一下您要做什么。
ps 将输出通过管道传输回原始文件可能不是一件好事,尤其是在实验时,尤其是当它是系统文件时。