寻找.net解析器的shell输出

本文关键字:shell 输出 net 寻找 | 更新日期: 2023-09-27 18:11:35

我正在寻找一个能够解析unix shell命令输出的库,如ipadm, dfzpool。有人能帮忙吗?

寻找.net解析器的shell输出

许多shell命令以固定宽度格式返回结果。这不需要任何特殊的解析,简单的字符串分割或正则表达式就足够了。例如,下面的正则表达式可以匹配df的输出:

^(?<fs>.{14})'s(?<blocks>.{9})'s(?<used>.{9})'s(?<available>.{9})'s(?<use>.{4})'s(?<on>.+)$

您可以将它与[Regex.Matches(https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.matches(v=vs.110).aspx)一起使用,以解析每行并将每列提取为命名组:

var pattern = @"^(?<fs>.{14})'s(?<blocks>.{9})'s(?<used>.{9})'s(?<available>.{9})'s(?<use>.{4})'s(?<on>.+)$";
var regex=new Regex(pattern,RegexOptions.Multiline);
var matches=regex.Matches(screenOutput);
foreach (Match line in matches)
{
    Console.WriteLine("{0} {1}",line.Groups["fs"].Trim(), line.Groups["used"].Trim());
}

甚至

var results = from Match line in regex.Matches(screenOutput)
              let groups=line.Groups
              select new {
                            FS=groups["fs"].Value.Trim(),
                            Used=groups["used"].Value.Trim()
                         }
var actualValues=results.Skip(1); // Skip the header
foreach......

正则表达式将固定宽度的字符串捕获到命名组(fs, block等)中,允许代码通过Groups属性访问它们。当使用RegexOptions.Multiline时,^$匹配单行的开始和结束