Ich bin auf der Suche nach einer Bibliothek, die Ausgabe von Unix-Shell-Befehle wie ipadm
, oder zpool
analysieren kann. Kann jemand aushelfen?Suche nach .NET-Parser Shell-Ausgabe
Antwort
Viele Shell-Befehle geben Ergebnisse in einem Format mit fester Breite zurück. Dies erfordert kein spezielles Parsing, eine einfache String-Aufteilung oder ein regulärer Ausdruck ist ausreichend. Zum Beispiel kann der folgende reguläre Ausdruck die Ausgabe von df
entsprechen:
^(?<fs>.{14})\s(?<blocks>.{9})\s(?<used>.{9})\s(?<available>.{9})\s(?<use>.{4})\s(?<on>.+)$
Hiermit können Sie mit [Regex.Matches (https://msdn.microsoft.com/en-us/library/system.text. regularexpressions.regex.matches (v = vs.110) ASPX-), um jede Zeile zu analysieren und jede Spalte als eine benannte Gruppe extrahieren:
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());
}
oder sogar
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......
Der reguläre Ausdruck einfängt fest Breite gs in benannte Gruppen (fs, Blöcke usw.), die dem Code Zugriff auf sie über die Groups
-Eigenschaft ermöglicht. ^
und $
passen den Anfang und das Ende einer einzelnen Zeile an, wenn RegexOptions.Multiline
verwendet wird.
- 1. Elastische Suche. Suche nach Untersammlungswert
- 2. Suche nach Ereignis nach Ort
- 3. Suche nach Verfügbarkeit nach Zeit
- 4. os.walk stoppe die Suche nach Unterverzeichnissen nach der ersten Suche
- 5. Elastische Suche URI Suche mit Gruppe Nach
- 6. Suche nach Unternehmens-Websites
- 7. Suche nach dem Maximum
- 8. Suche nach '.' mit string.find()
- 9. asp.net Suche nach Datei
- 10. Suche nach Ursprung Erweiterung
- 11. Suche nach Elternreferenzen
- 12. Suche nach bevölkern Mungo
- 13. Symfony3 Suche nach Beziehungen
- 14. Suche nach Hash?
- 15. Suche nach Umgebungsvariablen
- 16. Suche nach Design-Muster
- 17. Suche nach Winkelmesser Testrekorder
- 18. Suche nach WinForms Datagridview
- 19. Suche nach "is_comparable" typetit
- 20. Suche nach einer Primzahl
- 21. Suche nach Rewrite-Regeln
- 22. SQL: Suche nach URL
- 23. Suche nach Texteingabe
- 24. Suche nach Datenbankproblemen
- 25. Suche nach mehreren Spalten
- 26. Suche nach sozialen Netzwerken
- 27. gdb Suche nach Quellverzeichnissen
- 28. Suche nach generischem Typ
- 29. Suche nach Daten
- 30. Suche nach Zufallsindex
Sound wie Sie müssen Ihren eigenen Textparser schreiben. Es gibt keine Bibliothek, die für alle Shell-Befehle funktioniert. – jdweng
Viele Shell-Befehle geben Ergebnisse in einem Befehl mit fester Breite zurück. Sie brauchen dafür keinen speziellen Parser. Sie können Stringmanipulationsbefehle verwenden, um entweder nach Speicherplatz zu splitten oder Strings mit einer festen Länge zu lesen, genau wie in Linux. Sie können auch eine Regex verwenden, um jede Zeile zu analysieren –