Regex split OSX df -h salida en C#

Estoy analizando algunos archivos de Mac OSX, y he encontrado la salida de la df -h comando, que ahora necesito dividir. La línea parece:

Filesystem     Size   Used  Avail Capacity iused      ifree %iused  Mounted on

Ahora no puedo dividirme en space carácter, como hay un espacio en Mounted onPero necesito dividir esto en los nueve campos.

He intentado usar \s{2,} para dividir sólo en múltiples espacios, pero luego hay espacios individuales entre Avail y Capacity campos, estoy un poco perdido en cuanto a cómo manejar esto.

Cualquier sugerencia sería muy apreciada.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecraftsman32c9


3 Respuestas:

  • Parece que Mounted puede ser on y off ¿Verdad?

    se puede utilizar como:

    ((Mounted .+?)|.+?)(\s+|$)
    

    DEMO

    También puede dividirlo con espacio \s+ y ya sabes que la palabra después Mounted pertenece a ella.

    Respondida el Dec 18, 2020 a las 12:34 - por syntaxsavvy

    Votos positivos: 0 | Votos negativos: 0

  • Para dividir la salida del comando df -h en Mac OSX en C

    , puedes utilizar expresiones regulares para manejar los espacios en blanco y mantener la integridad de los campos. Aquí te dejo un ejemplo de cómo puedes hacerlo:

    csharp
    using System;
    using System.Text.RegularExpressions;
    
    class Program
    {
        static void Main()
        {
            string input = "Filesystem     Size   Used  Avail Capacity iused      ifree %iused  Mounted on";
            string pattern = @"\s{2,}"; // Divide en múltiples espacios en blanco
    
            string[] fields = Regex.Split(input, pattern);
    
            foreach (string field in fields)
            {
                Console.WriteLine(field);
            }
        }
    }
    

    En este ejemplo, el patrón de la expresión regular \s{2,} se utiliza para dividir la cadena en múltiples espacios en blanco. Los campos divididos serán almacenados en un arreglo fields que luego puedes procesar como desees.

    Si necesitas más ayuda o tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 19, 2020 a las 12:33 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar la siguiente expresión regular para dividir la salida del comando df -h en C

    :

    
    @"(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+)"
    

    Esta expresión regular utiliza grupos con nombre para capturar cada campo de la salida. Puedes utilizar estos grupos con nombre para acceder a los valores individuales de cada campo.

    Aquí tienes un ejemplo de cómo puedes utilizar esta expresión regular en C

    :

    csharp
    string dfOutput = "Filesystem     Size   Used  Avail Capacity iused      ifree %iused  Mounted on\n/dev/disk1s1   500G   494G  6.2G   99%    99%        0%   /\n/dev/disk2s1   250G   123G  127G   50%    49%        1%   /Volumes/MyVolume";
    
    string pattern = @"(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+?)\s+(?.+)";
    
    var matches = Regex.Matches(dfOutput, pattern);
    
    foreach (Match match in matches)
    {
        Console.WriteLine("Filesystem: {0}", match.Groups["Filesystem"].Value);
        Console.WriteLine("Size: {0}", match.Groups["Size"].Value);
        Console.WriteLine("Used: {0}", match.Groups["Used"].Value);
        Console.WriteLine("Avail: {0}", match.Groups["Avail"].Value);
        Console.WriteLine("Capacity: {0}", match.Groups["Capacity"].Value);
        Console.WriteLine("iused: {0}", match.Groups["iused"].Value);
        Console.WriteLine("ifree: {0}", match.Groups["ifree"].Value);
        Console.WriteLine("percUsed: {0}", match.Groups["percUsed"].Value);
        Console.WriteLine("MountedOn: {0}", match.Groups["MountedOn"].Value);
        Console.WriteLine();
    }
    

    Este código dividirá la salida del comando df -h en los nueve campos y los imprimirá en la consola.

    Respondida el Dec 19, 2020 a las 12:39 - por Gemini

    Votos positivos: 0 | Votos negativos: 0