如何用Java解析命令输出,提取指定POLICY名称与EXIT STATUS值
Java实现解析命令输出提取POLICY名称和EXIT STATUS
我来给你分享一个用Java解析这类命令输出的靠谱方案,不用纠结字符串截取的位置问题,正则表达式就能精准匹配目标内容,不管它们在输出里的位置怎么变都能搞定。
核心思路
我们用正则表达式分别匹配两种目标内容:
- 匹配格式为
POLICY ENM_USERDEFINED_xxx的名称:正则模式为POLICY (ENM_USERDEFINED_\S+),其中ENM_USERDEFINED_\S+会匹配以ENM_USERDEFINED_开头、直到下一个空白字符的完整名称。 - 匹配
EXIT STATUS对应的数值:正则模式为EXIT STATUS (\d+),\d+会匹配所有连续的数字。
完整Java代码示例
import java.util.regex.Matcher; import java.util.regex.Pattern; public class CommandOutputParser { public static void main(String[] args) { // 模拟命令输出的文本(你可以替换成实际的命令输出内容) String commandOutput = """ Some random output lines before... POLICY ENM_USERDEFINED_wtc2e3lms-bu More unrelated lines here... EXIT STATUS 0 Other trailing content... """; // 提取POLICY名称 Pattern policyPattern = Pattern.compile("POLICY (ENM_USERDEFINED_\\S+)"); Matcher policyMatcher = policyPattern.matcher(commandOutput); if (policyMatcher.find()) { String policyName = policyMatcher.group(1); System.out.println("提取到的POLICY名称:" + policyName); } else { System.out.println("未找到匹配的POLICY名称"); } // 提取EXIT STATUS数值 Pattern exitStatusPattern = Pattern.compile("EXIT STATUS (\\d+)"); Matcher exitStatusMatcher = exitStatusPattern.matcher(commandOutput); if (exitStatusMatcher.find()) { String exitStatus = exitStatusMatcher.group(1); System.out.println("提取到的EXIT STATUS数值:" + exitStatus); } else { System.out.println("未找到EXIT STATUS数值"); } } }
代码说明
- 首先定义模拟的命令输出文本,实际使用时你可以通过读取命令执行的输入流来获取真实输出。
- 分别创建两个
Pattern对象,对应两种匹配规则。 - 使用
Matcher对象在输出文本中查找匹配内容,通过group(1)获取括号内捕获的目标内容(也就是我们需要提取的部分)。 - 最后判断是否找到匹配项,输出结果或者提示未找到。
这个方案不管POLICY和EXIT STATUS在输出里的位置如何变化,只要格式符合要求,就能准确提取到你需要的内容~
内容的提问来源于stack exchange,提问作者Nabarko Roy
相关产品推荐
相关产品推荐

