findstr没有按预期工作

时间:2017-04-23 11:32:52

标签: cmd notepad++ findstr

我正在尝试使用正则表达式^.*\z在文本文件中查找最后一行,它在记事本++中工作正常,但是当我在cmd中使用findstr /R "^.*^Z" file.txt无效时尝试它。

1 个答案:

答案 0 :(得分:1)

打开命令提示符窗口并运行findstr /?。输出帮助解释了 FINDSTR 支持的内容。正则表达式功能仅限于 FINDSTR 。它不支持许多文本编辑器在各种版本中使用的Boost Perl Regular Expression library所支持的所有功能。

此批处理代码可用于从分配给环境变量的文件中获取最后一个非空行:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LastLine="

if exist "file.txt" for /F "usebackq eol= delims=" %%# in ("file.txt") do set "LastLine=%%#"

echo Last line is: "%LastLine%"
endlocal

命令 FOR 会跳过所有空行,默认情况下也会跳过以分号开头的所有行。因此,eol=用于将换页控制字符定义为行尾。如果最后一行文件肯定永远不会从;开始,最好从 FOR 命令行中删除eol=

如果要处理的文件总是至少有X行,那么在usebackq选项skip=X之后添加到 FOR 选项以跳过第一行是有意义的文件的X行,以便更快地处理。

有关命令 FOR 的详细信息,请打开命令提示符窗口并运行for /?