我有一个包含异常的日志文件,异常位于不同的行上。我想让sed / awk / cut将它们组合在一起。规则。第一行的开头始终有一个日期时间戳。
示例:( 5行异常)
2017-04-24T04:26:58.728-0400 - VALUE {tomcat-device-http-1} none|none
[{{0ecfe8a7}{Uri, - WARN Could not marshal entity
java.lang.ArrayIndexOutOfBoundsException: -1
at com.sun..java:487)
at com.sun:323)
at com.sun.java:251)
最终结果:
2017-04-24T04:26:58.728-0400 - VALUE {tomcat-device-http-1} none|none [{{0ecfe8a7}{Uri, - WARN Could not marshal entity java.lang.ArrayIndexOutOfBoundsException: -1 at com.sun..java:487) at com.sun:323) at com.sun.java:251)
答案 0 :(得分:0)
此批处理文件可以执行您想要的操作:
@echo off
setlocal EnableDelayedExpansion
(
for /F "delims=" %%a in (input.txt) do (
set "line=%%a"
if "!line:~0,2!" equ "20" echo/
set /P "=%%a "
)
echo/
) < NUL > output.txt
答案 1 :(得分:0)
以下是使用JREPL.BAT - a regular expression text processor的简单高效(快速)解决方案。 JREPL.BAT是纯脚本(混合批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 不需要第三方exe文件。
以下内容将直接在命令行中运行,无需批处理文件。
如果日志文件test.log已经存在,并且您想要在屏幕上看到输出,那么:
jrepl "^(?:(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{3}-\d{4} -)|\s*)(.*)" "stdout.write(($1?'\n'+$1:' ')+$2);$txt=false" /jmatchq /f test.log
如果要将结果写入文件&#34; output.log&#34;,请附加/o output.log
如果要覆盖原始文件,请附加/o -
如果要将命令放在批处理脚本中,请使用call jrepl
如果你有一个程序将日志写入stdout,那么你可以将程序输出传递给命令并删除/f
选项。
logGeneratingCommand | jrepl "^(?:(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{3}-\d{4} -)|\s*)(.*)" "stdout.write(($1?'\n'+$1:' ')+$2);$txt=false" /jmatchq
显然,您可以添加/o outfile
或/o -
选项。
CALL
。
可以从命令行通过jrepl /?
或jrepl /??
获取完整的JREPL文档,以获取分页帮助。通过jrepl /?options
可以获得总结的选项列表。使用jrepl /?help
获取所有帮助选项的完整列表。