0
我在找一個能夠解析unix shell命令輸出的庫,如ipadm
,df
或zpool
。有人可以幫忙嗎?尋找.NET解析器的shell輸出
我在找一個能夠解析unix shell命令輸出的庫,如ipadm
,df
或zpool
。有人可以幫忙嗎?尋找.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......
正則表達式捕獲定點寬度嚴格gs轉換爲命名組(fs,blocks等),允許代碼通過Groups
屬性訪問它們。當使用RegexOptions.Multiline
時,^
和$
匹配單行的開始和結束。
聽起來像你需要編寫自己的文本解析器。沒有適用於所有shell命令的庫。 – jdweng
許多shell命令以固定寬度命令返回結果。你不需要特殊的解析器。您可以使用字符串操作命令來分隔空間或讀取固定長度的字符串,就像在Linux中一樣。你也可以使用正則表達式來解析每一行 –