- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 Windows DOS 提示符下。我有日志文件,其中包含如下日志:
Timestamp: Order received for Item No. 26551
Timestamp: Exception: OutOfRangeException
Timestamp: Message: Inventory Item is not stock. Item No. 23423
Timestamp: Order received for Item No. 23341
我想提取所有给出某种异常的项目编号。我正在为此使用 findstr 命令。如何在我的正则表达式中使用换行符?我想要所有有异常字的行和下一行的项目号。
有什么帮助吗?
最佳答案
我发现了一个未记录的功能 - FINDSTR CAN 匹配换行符 <CR>
和 <LF>
并在后续行中继续匹配。但搜索字符串必须在命令行指定,换行符必须在变量中,值必须通过延迟扩展传递。
另一个复杂情况是 FOR 循环的 IN() 子句在单独的隐式 CMD session 中执行,并且必须重新启用延迟扩展。此外,!必须转义字符,以便它们进入第二个 CMD session 。
这个小测试脚本可以解决问题。
@echo off
setlocal enableDelayedExpansion
if "%~1"==":doSearch" goto :doSearch
::Define a variable as a LineFeed (0x0A) character
set LF=^
:: The above 2 blank lines MUST be preserved!
::Define a CR variable as a CarriageReturn (0x0D) character
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
set file="test.txt"
for /f "delims=" %%A in ('cmd /v:on /c^"findstr /rc:"Item No\. .*^!CR^!*^!LF^!.* Exception: " %file%^"') do (
set "ln=%%A"
set "item=!ln:*Item No. =!"
echo Item No. !item! had an exception
)
exit /b
编辑 2015-01-11
我刚刚重读了这个问题,发现我做错了。 OP 想要异常字符串出现在前一行的项目编号(向后搜索),但我的解决方案只能找到异常字符串出现在后续行的项目编号(向前搜索)。
不幸的是,没有办法让 FINDSTR 进行 look behind search。
在大多数情况下,我会删除上面的答案,因为它没有回答问题。但是,这个答案确实记录了一个新的 FINDSTR 功能,该功能以前没有被描述过,可能非常有用。前瞻功能在概念上与后视功能非常接近,需要它的人可能会通过这个问题找到答案,所以我打算保留它。
我确实有一个纯基于脚本的解决方案,可以在 XP 及更高版本的任何 Windows 机器上运行,但它不使用 FINDSTR。 JREPL.BAT是一个正则表达式命令行,可以轻松提取所需的项目编号。
jrepl "Item No\. (\d+)\r\n.* Exception: " $1 /m /jmatch /f test.txt
关于windows - 如何将 findstr 与换行符正则表达式一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5631752/
我的批处理程序 FINDSTR /C:"Result Comparison failure" %tmp_result_file% 我想做以下操作,将上述命令的结果设置为变量。 如果找到,将第一行设
我在文本文件(test.txt)中有以下字符串: BLA BLA BLA BLA BLA Found 11 errors and 7 warnings 我执行以下命令: findstr /r "[0-
今天从命令行提示符启动 JBoss 时出现以下错误: 'findstr' is not recognized as an internal or external command 最佳答案 请谷歌一下
我不明白; 搜索 用法很清楚,但我无法让它工作。我要搜索 在文本文件上,使用 ^和 $特点。这边走: findstr /C:"^test$" test.txt 我以多种方式制作了文件 (test.tx
我正在尝试编写一个 findstr 正则表达式,它将使用 subversion 查找本地和远程修改的文件。鉴于下面的示例输出,我想匹配那些以“M”作为第一个或第二个字符的行。还会有其他人,但这是我的起
我做了一段批处理代码,我认为这会奏效。我在想这段代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt 中得到了pluginlink。然后我用java语句从SVN获取插件。我
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是 Windows 批处理编程和 Stack Overflow 的新手,所以如果我问任何对你们经验丰富、才华横溢的人来说显而易见的问题,请原谅我。我正在使用 Windows 批处理 (.bat) 使
我正在使用 findstr 及其 /r 标志进行一些字符串验证,以允许使用正则表达式。特别是我想验证整数。 正则表达式 ^[0-9][0-9]*$ 对于非负数效果很好,但由于我现在也支持负数,所以我尝
我有两个文件: 1.txt: abc def 2.txt: abc 请注意,2.txt 仅包含 3 个字符,没有空行。现在,如果我这样做: findstr /S /I /L /A:02 "abc" *
我只想在他的文本文件中找到特定的行,所以我认为使用范围是个好主意。但我似乎可以在网上找到任何教程。请帮助.. 文本文件的例子 XXX scan report for 192.0.0.0 example
Windows 中的批处理文件有时会让人感到困惑。怎么办 findstr "^" 相当于找一个空文件夹,当^表示行首? for /d /r %1 %%A in (.) do ( dir /ad
我正在尝试使用 findstr 代替 grep 在准系统的 vanilla windows 框上(遗憾的是这是一个要求)。我有一些相对较大的文件 (1Gb+),我想提取那些不包括 MX、MXnn、BR
我需要使用 DOS 命令 FINDSTR 来搜索我们所有与其他类型文件(如 PDF、exe、dll 等)混合的源代码文件。 我不需要搜索那些二进制文件。有没有办法排除二进制文件? 我的命令看起来像 f
我有一个程序正在使用 findstr ,当找到字符串时 errorlevel返回 0当找不到字符串时 errorlevel返回 1 .好吧,没关系,我可以处理。 问题出在哪里,我找不到任何关于每个 e
这很简单……为什么第一个命令有效而第二个命令无效? Findstr 在我看来最适合在“dos”之类的命令中使用,而不是在 powershell 中使用。 Get-AppXProvisionedPack
PowerShell 的 DOS FINDSTR 等价物是什么? ?我需要在一堆日志文件中搜索“错误”。 最佳答案 这是快速答案 Get-ChildItem -Recurse -Include *.l
我正在尝试使用netstat -abn或Select-String来获取findstr命令的完整输出,但是由于仅列出了搜索字符串,因此无法正常工作。我正在寻找与grep在Linux上相同的行为,如果您
我正在尝试执行命令 findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt 得到跟随输出 index.html: FINDSTR: Cannot ope
我是一名优秀的程序员,十分优秀!