You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则从含ANSI转义码的CM CLI输出中提取指定参数?

解决带ANSI转义码的CLI输出提取问题

第一步:先过滤ANSI转义码

ANSI转义码(颜色、光标控制等序列)会干扰正则匹配,必须先清理。以下是两种常用处理方式:

Shell环境(sed/awk)

用sed直接过滤所有常见的ANSI转义序列:

# 替换成你的SSH执行命令
ssh user@cm_host "your_target_command" | sed -e 's/\x1b\[[0-9;]*[a-zA-Z]//g'

该命令会移除所有以ESC[开头的转义码,覆盖颜色、加粗、光标移动等绝大多数场景。

Python脚本

如果用Python处理原始输出字符串,通过正则替换完成清理:

import re

# 替换为从SSH获取的原始输出内容
raw_cli_output = "带ANSI转义码的原始CLI输出"
clean_output = re.sub(r'\x1b\[[0-9;]*[a-zA-Z]', '', raw_cli_output)

第二步:提取目标信息

清理完转义码后,即可精准匹配Maximum Stations: 135 110这类内容:

Shell环境(grep)

用Perl兼容正则直接提取完整内容或仅数字:

# 提取完整目标行
ssh user@cm_host "your_target_command" | sed -e 's/\x1b\[[0-9;]*[a-zA-Z]//g' | grep 'Maximum Stations: [0-9]\+ [0-9]\+'

# 仅提取数字部分(输出135 110)
ssh user@cm_host "your_target_command" | sed -e 's/\x1b\[[0-9;]*[a-zA-Z]//g' | grep -oP 'Maximum Stations: \K\d+ \d+'

其中\K用于忽略前面匹配的Maximum Stations: ,直接输出后续的数字组合。

Python脚本

通过正则捕获目标内容及单独数字:

match_result = re.search(r'Maximum Stations: (\d+) (\d+)', clean_output)
if match_result:
    full_content = match_result.group(0)
    first_num, second_num = match_result.groups()
    print(f"完整提取内容: {full_content}")
    print(f"第一个数值: {first_num}, 第二个数值: {second_num}")
else:
    print("未找到目标信息")

常见问题说明

之前正则无效大概率是因为未清理ANSI转义码——转义码会插入到目标字符串的中间或前后,导致正则无法匹配。必须先完成转义码过滤,再进行目标匹配。若仍有问题,可检查原始输出中目标行是否存在额外空格或大小写差异(从你给出的示例来看格式是固定的)。

内容的提问来源于stack exchange,提问作者Palwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:35:41