Content

lua日志文件处理代码(lua脚本如何使用)越早知道越好

文章摘要

这篇文章主要介绍了用Lua语言实现的文件和目录搜索脚本。该脚本通过定义辅助函数(如`FormatCmd`、`FormatPath`、`CheckFile`、`OpenFile`等),实现了对指定路径中的文件和目录进行搜索、匹配和处理。脚本支持从指定目录搜索匹配的命令行或文件名,并根据配置输出结果到指定路径。核心功能包括文件匹配、路径处理和结果输出,能够自动处理搜索结果并写入日志文件。

 — search_log.lua tbResult={}; tbCmdResult={}; local szTmpFolderPath=os.getenv(“temp”); if not szTmpFolderPath then os.execute(“md c:\\temp”) szTmpFolderPath=”c:\\temp”; end local tbSpecialWorld={ [“(“]=”%(“, [“)”]=”%)”, [“.”]=”%.”, [“%”]=”%%”, [“+”]=”%+”, [“-“]=”%-“, [“*”]=”%*”, [“?”]=”%?”, [“[“]=”%[“, [“]”]=”%]”, [“^”]=”%^”, [“$”]=”%$”, }; function FormatCmd(szCmd) return string.gsub(szCmd, “.”, function(s) return tbSpecialWorld[s] or s; end) end function FormatPath(szPath) string.gsub(szPath, “[\/]$”, “”); return string.gsub(szPath, “/”, “\”); end function CheckFile(szFilePath) local file=io.open(szFilePath, “rb”); if not file then return; end file:close(); return true; end function OpenFile(szFilePath) if not CheckFile(szFilePath) then return; end local tbFile={}; for line in io.lines(szFilePath) do table.insert(tbFile, line); end return tbFile; end function SearchFile(szFilePath, szCmd, fnCmd2Line, fnFileName) local tbFile=OpenFile(szFilePath); if not tbFile then return; end tbResult[szFilePath]=tbResult[szFilePath] or {}; local szCmdResult=””; for nLine, szLine in ipairs(tbFile) do if string.match(szLine, szCmd) then szCmdResult=fnCmd2Line(szLine); if szCmdResult and szCmdResult ~=”” then table.insert(tbCmdResult, szCmdResult); end table.insert(tbResult[szFilePath], nLine .. “:” .. szLine); end end return 1; end function Cmd2Line(szLine) return; end function CheckName(szFileName) return true; end function SearchDir(szFolderPath, szCmd, fnCmd2Line, fnCheckName, nIdx) if not szCmd or szCmd==”” then return; end local fnCmd2Line=fnCmd2Line or Cmd2Line; local fnCheckName=fnCheckName or CheckName; local nIdx=nIdx or 0; local szTmpFileName=szTmpFolderPath .. “\\SearchDirTemp” .. nIdx .. “.tmp”; os.execute(“dir /b “.. szFolderPath ..” >” .. szTmpFileName); local tbFile=OpenFile(szTmpFileName); if not tbFile or #tbFile==0 then return; end local szPath=””; for _, szFileName in ipairs(tbFile) do szPath=szFolderPath .. “\” .. szFileName; if not CheckFile(szPath) then SearchDir(szPath, szCmd, fnCmd2Line, nIdx + 1); else if CheckName(szFileName) then SearchFile(szPath, szCmd, fnCmd2Line); end end end end function Write2File(szInfo, szFilePath) local file=io.open(szFilePath, “w”); if not file then print(szInfo); print(“Write2File ERR ?? not file ” .. szFilePath); return; end file:write(szInfo); file:close(); end function DoSearchDir(szFolderPath, szCmd, tbParam) if not szFolderPath or szFolderPath==”” or not szCmd or szCmd==”” then return; end tbParam=tbParam or {}; szFolderPath=FormatPath(szFolderPath); if tbParam.bIsMatch then szCmd=FormatCmd(szCmd); end local nTime=os.time(); SearchDir(szFolderPath, szCmd, tbParam.fnCmd2Line or Cmd2Line, tbParam.fnCheckName or CheckName, 0); nTime=os.time() – nTime; print(“搜索用时:” .. nTime); local szResultPath=tbParam.szResultPath or (szTmpFolderPath .. “\\result.tab.tmp”); local szResult=””; for szFilePath, tbInfo in pairs(tbResult) do szResult=szResult .. szFilePath .. “\n”; for _, szLine in pairs(tbInfo) do szResult=szResult .. szLine .. “\n”; end end Write2File(szResult, szResultPath); local szCmdResult=””; for _, szLine in pairs(tbCmdResult) do szCmdResult=szCmdResult .. szLine .. “\n”; end Write2File(szCmdResult, tbParam.szCmdResultPath or (szTmpFolderPath .. “\\cmd_result.tab.tmp”)); end –tbParam=–{ — bIsMatch=false; — 是否使用正则方式搜索 — fnCmd2Line=function () end; — 自定义搜索行内容处理函数 — fnCheckName=function () end; — 文件名限定函数 — szResultPath=”e:\\result.tab”; — 文件搜索内容输出路径 — szCmdResultPath=”e:\\cmd_result.tab”; — 自定义处理函数返回内容储存路径 –}