我在文本文件(test.txt)中有这个字符串:
BLA BLA BLA
BLA BLA
Found 11 errors and 7 warnings
Run Code Online (Sandbox Code Playgroud)
我执行此命令:
findstr /r "[0-9]+ errors" test.txt
Run Code Online (Sandbox Code Playgroud)
为了得到只是11 errors字符串.
相反,输出是:
Found 11 errors and 7 warnings
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
该FINDSTR工具不能用于仅提取匹配。为此,使用 Powershell 要容易得多。
下面是一个例子:
$input_path = 'c:\ps\in.txt'
$output_file = 'c:\ps\out.txt'
$regex = '[0-9]+ errors'
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file
Run Code Online (Sandbox Code Playgroud)
见的Windows PowerShell中:提取字符串使用正则表达式的文章如何使用上面的脚本。
findstr始终返回包含匹配项的每个完整行,它不能仅返回子字符串.因此,您需要自己进行子字符串提取.无论如何,你的findstr命令行中存在一些问题,我想指出:
字符串参数findstr实际上定义了由空格分隔的多个搜索字符串,因此一个搜索字符串是[0-9]+,另一个是error.Found 11 errors and 7 warnings由于error只有单词,因此返回文本文件中的行,数字部分不是匹配的一部分,因为findstr不支持该+字符(前一个字符或类的一次或多次出现),您需要更改该部分搜索字符串[0-9][0-9]*来实现这一点.要将整个字符串视为一个搜索字符串,您需要提供该/C选项; 由于默认为文字搜索模式,因此您还需要/R显式添加选项.
findstr /R /C:"[0-9][0-9]* errors" "test.txt"
Run Code Online (Sandbox Code Playgroud)
然而,更改所有这些也会匹配字符串x5 errorse; 避免你可以使用单词边界,如\<(单词的开头)和\>(单词的结尾).(或者,您也可以在搜索字符串的两侧包含空格/C:" [0-9][0-9]* errors ",但是,如果搜索字符串出现在适用行的开头或结尾,则可能会出现问题.)
因此,对于上述所有内容,更正和改进的命令行如下所示:
findstr /R /C:"\<[0-9][0-9]* errors\>" "test.txt"
Run Code Online (Sandbox Code Playgroud)
这将返回包含匹配项的整行:
Run Code Online (Sandbox Code Playgroud)Found 11 errors and 7 warnings
如果你想只返回这些线并且排除般的线条2 errors are enough或35 warnings but less than 3 errors,你当然可以相应地扩大搜索字符串:
findstr /R /C:"^Found [0-9][0-9]* errors and [0-9][0-9]* warnings$" "test.txt"
Run Code Online (Sandbox Code Playgroud)
无论如何,要提取部分11 errors有几个选项:
一个for /F循环可以解析的输出findstr和提取某些令牌:
for /F "tokens=2-3 delims= " %%E in ('
findstr/R /C:"\<[0-9][0-9]* errors\>" "test.txt"
') do echo(%%E %%F
Run Code Online (Sandbox Code Playgroud)也可以使用子字符串替换语法:
for /F "delims=" %%L in ('
findstr /R /C:"\<[0-9][0-9]* errors\>" "test.txt"
') do set "LINE=%%L"
set "LINE=%LINE:* =%"
set "LINE=%LINE: and =" & rem "%"
echo(%LINE%
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
11097 次 |
| 最近记录: |