第 n 个特殊字符和字符串之间的正则表达式 select
Regex select between nth special character and a string
我有一个 ESXi 主机出现故障,我正在尝试 grep 故障时主机上 运行 的来宾。
我发现了一些日志,其中在我们重新启动 ESXi 主机后 VM 无法加载,这可能会为我提供我正在寻找的信息,但是,我只对 VM 名称和编译感兴趣将其放入列表中。
日志的一部分内容如下:
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”,其中这将是所有虚拟机的名称,因为当然有多个条目都具有不同的名称。以下是我到目前为止的内容,除了我想 select 第 5 /
(?=\/).*(?=.vmx)
但是,上面的模式returns没有结果,可能是ESXi的限制,下面是我用来查找我需要的日志的。
grep -E "vim.fault" hostd.log
如果我必须将 grep 的结果粘贴到 np++ 中以获得正确的正则表达式,那也很好。
非常感谢您的任何帮助。
POSIX ERE 不支持环视。
你可以使用
grep -oE '[^][/]+\.vmx' hostd.log
此处,o
选项使 grep
提取匹配,E
启用 POSIX ERE 语法,[^][/]+\.vmx
正则表达式匹配一个或多个其他字符比 ]
、[
和 /
然后 .vmx
子串。
或者,sed
喜欢
sed -nE 's,.*/([^][/]+\.vmx).*,,p' hostd.log
这里,
-nE
- n
选项抑制默认行输出,E
启用 POSIX ERE 语法
s,.*/([^][/]+\.vmx).*,,p
- s
找到的替换命令
.*
- 任何文本
/
- /
字符
([^][/]+\.vmx)
- 第 1 组:除 [
、]
和 /
之外的一个或多个字符,然后是 .vmx
.*
- 任何文本
</code> - 用第 1 组值 </li> 替换匹配项(整个字符串)
<li><code>p
- 只打印替换的结果。
我有一个 ESXi 主机出现故障,我正在尝试 grep 故障时主机上 运行 的来宾。
我发现了一些日志,其中在我们重新启动 ESXi 主机后 VM 无法加载,这可能会为我提供我正在寻找的信息,但是,我只对 VM 名称和编译感兴趣将其放入列表中。
日志的一部分内容如下:
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”,其中这将是所有虚拟机的名称,因为当然有多个条目都具有不同的名称。以下是我到目前为止的内容,除了我想 select 第 5 /
(?=\/).*(?=.vmx)
但是,上面的模式returns没有结果,可能是ESXi的限制,下面是我用来查找我需要的日志的。
grep -E "vim.fault" hostd.log
如果我必须将 grep 的结果粘贴到 np++ 中以获得正确的正则表达式,那也很好。 非常感谢您的任何帮助。
POSIX ERE 不支持环视。
你可以使用
grep -oE '[^][/]+\.vmx' hostd.log
此处,o
选项使 grep
提取匹配,E
启用 POSIX ERE 语法,[^][/]+\.vmx
正则表达式匹配一个或多个其他字符比 ]
、[
和 /
然后 .vmx
子串。
或者,sed
喜欢
sed -nE 's,.*/([^][/]+\.vmx).*,,p' hostd.log
这里,
-nE
-n
选项抑制默认行输出,E
启用 POSIX ERE 语法s,.*/([^][/]+\.vmx).*,,p
-s
找到的替换命令.*
- 任何文本/
-/
字符([^][/]+\.vmx)
- 第 1 组:除[
、]
和/
之外的一个或多个字符,然后是.vmx
.*
- 任何文本
</code> - 用第 1 组值 </li> 替换匹配项(整个字符串) <li><code>p
- 只打印替换的结果。