【发布时间】:2021-11-03 19:41:06
【问题描述】:
我有一个失败的 ESXi 主机,我正在尝试 grep 可能在失败时在主机上运行的来宾。
在我们重新启动 ESXi 主机后,我发现了一些虚拟机无法加载的日志,这可能会提供我正在寻找的信息,但是,我只对虚拟机名称感兴趣并将其编译成一个列表。
日志的一部分内容如下:
2021-09-06T13:33:01.272Z info hostd[2101147] [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/5c0ae3ca-926257bb-d4dc-1234567e66bc/VMNAME/VMNAME.vmx] Failed to load virtual machine: N3Vim5Fault12FileNotFound9ExceptionE(Fault cause: vim.fault.FileNotFound
我的最终目标是获取“VMNAME”,这将是所有虚拟机的名称,因为当然有几个条目都具有不同的名称。以下是我目前所拥有的,除了我想选择第 5 个/
(?=\/).*(?=.vmx)
但是,上面的模式没有返回结果,可能是 ESXi 的限制,下面是我用来查找所需日志的方法。
grep -E "vim.fault" hostd.log
如果我必须将 grep 的结果粘贴到 np++ 中以获得正确的正则表达式,那也可以。 非常感谢您的任何帮助。
【问题讨论】:
-
POSIX ERE 不支持环视。试试
grep -oE '[^][/]+\.vmx' hostd.log。或sed -nE 's,.*/([^][/]+\.vmx).*,\1,p' hostd.log -
这很棒,完全符合我的要求。仍然必须使用 np++ 删除重复的行,但我得到了我需要的东西,谢谢 Wiktor。