如何使用正则从故障ESXi主机的hostd日志中提取对应虚拟机名称
ESXi主机故障日志提取虚拟机名称解决方案
方案1:ESXi命令行直接生成列表
ESXi自带的grep默认不支持PCRE正则预查语法,你原来的正则无法直接运行,直接用以下命令即可输出去重后的故障虚拟机名称:
grep "vim.fault" hostd.log | sed -n 's/.*\/\([^\/]*\)\.vmx.*/\1/p' | sort | uniq
命令逻辑说明:
- 先筛选出所有包含VM加载失败的日志行
- 用sed匹配每行中最后一个
/到.vmx之间的内容,也就是目标虚拟机名称 - 最后排序去重得到无重复的列表
方案2:Notepad++中处理导出的日志
如果已经把grep -E "vim.fault" hostd.log的结果粘贴到了Notepad++中,按以下步骤操作即可提取:
- 按下
Ctrl+H打开替换面板 - 「查找目标」填写正则:
^.*\/([^\/]+)\.vmx.*$ - 「替换为」填写:
$1 - 查找模式选择「正则表达式」,取消勾选「点匹配换行符」
- 点击「全部替换」,剩余内容就是所有虚拟机名称,手动去重即可
原正则失效原因
你之前用的(?=\/).*(?=.vmx)存在两个问题:
- 属于贪婪匹配,会匹配行内第一个
/到.vmx前的所有路径内容,不会单独提取VM名称 - ESXi默认grep不支持PCRE正则的预查语法,因此无返回结果
内容的提问来源于stack exchange,提问作者Run.Bat
相关产品推荐
相关产品推荐

