Windows批处理编程:仅从文件中删除完全匹配的行

时间:2013-01-20 12:05:41

标签: windows batch-file cmd

我有一个这样的文件:

exit;
exit_cool
int exit =30
exitstatus;
exit ;
 exit;
some exit;
coolexit;
this line should not be removed.
exitexit;

我想删除只包含“exit”的行从这个文件。所以我希望命令只从文件中删除第一行。我现在使用这个命令:

type somefile.txt | find /v "exit;"

但我得到的输出是:

exit_cool
int exit =30
exitstatus;
exit ;
this line should not be removed.

正如您所看到的那样,该命令删除了包含exit;的所有行。我只想删除第1行,因为它是完全匹配。有什么帮助?

2 个答案:

答案 0 :(得分:1)

FIND不能做你想要的。但FINDSTR可以: - )

将FINDSTR与正则表达式锚点^一起用于行的开头,将$用于行尾:

findstr /v "^exit;$" "somefile.txt"

或者使用具有完全相同含义的/x选项,但也可以与字符串文字一起使用,而不仅仅是正则表达式:

findstr /v /x /c:"exit;" "somefile.txt"

请注意,当文本文件使用以回车符/终止的Windows样式行时,行结束$锚点和/x选项(以及/e结束选项)才能正常工作换行。简单地使用换行符结束的Unix样式行将无法正常工作。

答案 1 :(得分:0)

使用findstr命令。而不是find 它更好,也需要正则表达式。

type somefile | findstr /v "^exit;"

findstr /v "^exit;" somefile
祝你好运