如何在Zabbix中用JSONPath提取cmdline中tnslsnr后的字符串?
提取cmdline中tnslsnr后的第一个参数
针对你的需求,这里提供两种基于jq的实现方式,直接处理JSON数据提取目标内容:
方法1:分割字符串取元素
利用split按空白字符分割cmdline内容,直接取tnslsnr后的第一个参数:
jq -r '$..cmdline | .[] | split(/\s+/) | .[1]' your_json_file.json
说明:
split(/\s+/):按任意数量的空白字符分割字符串,避免多空格导致的空元素问题.[]:遍历提取到的cmdline数组(因为$..cmdline返回数组).1:取分割后数组的第二个元素,对应tnslsnr后的第一个参数
方法2:正则匹配提取
用正则精准匹配tnslsnr后的非空白字符串,适用性更强(比如tnslsnr路径变化不影响):
jq -r '$..cmdline | .[] | capture("tnslsnr\\s+(\\S+)").[0]' your_json_file.json
说明:
capture("tnslsnr\\s+(\\S+)"):匹配tnslsnr后面的任意空白,再捕获后续的非空白字符(即目标参数).0:取捕获到的第一个分组内容,就是你需要的字符串
测试示例
用你提供的JSON数据测试,两种方法都会输出:
TEST_HOM
内容的提问来源于stack exchange,提问作者Astora
相关产品推荐
相关产品推荐

