Heim > Backend-Entwicklung > Golang > Wie behandelt man mehrdeutige Zeilenumbrüche in Go-Strings aus der „exec.Command'-Ausgabe richtig?

Wie behandelt man mehrdeutige Zeilenumbrüche in Go-Strings aus der „exec.Command'-Ausgabe richtig?

Susan Sarandon
Freigeben: 2024-11-28 21:21:15
Original
857 Leute haben es durchsucht

How to Properly Handle Ambiguous Line Breaks in Go Strings from `exec.Command` Output?

Umgang mit mehrdeutigen Zeilenumbrüchen in Go-Strings

Beim Parsen der String-Ausgabe eines Linux-Befehls mit exec.Command kann zwischen eingebetteten „n“ Zeichen und tatsächlichen Zeilenumbrüchen unterschieden werden Seien Sie anspruchsvoll.

Um die beabsichtigten Zeilenumbrüche beizubehalten, beachten Sie Folgendes Technik:

Escaped-Zeilenumbrüche

Es ist möglich, dass die eingebetteten „n“ Zeichen tatsächlich maskierte Versionen von Zeilenumbrüchen sind. Um dies zu beheben, ersetzen Sie die maskierten „n“-Sequenzen durch echte Zeilenumbrüche:

output = strings.Replace(output, `\n`, "\n", -1)
Nach dem Login kopieren

Durch die Verwendung von Backticks (``) zum Definieren der Ersatzzeichenfolge können Sie diese bei Bedarf über mehrere Zeilen erstrecken.

Zeilenweises Parsen

Sobald die maskierten Zeilenumbrüche korrigiert sind, können Sie bufio.NewScanner verwenden, um Analysieren Sie die gesamte Zeichenfolge Zeile für Zeile:

scanner := bufio.NewScanner(strings.NewReader(output))
for scanner.Scan() {
    line := scanner.Text()
    fmt.Println(line)
}
Nach dem Login kopieren

Bei diesem Ansatz wird die Zeichenfolge nur an tatsächlichen Zeilenumbrüchen geteilt, wobei alle eingebetteten „n“ Zeichen im Zeileninhalt erhalten bleiben.

Beispiel

Das folgende Beispiel demonstriert den Ansatz:

import (
    "bufio"
    "bytes"
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    output, err := exec.Command("sh", "-c", "echo \"test1\n123;\n234;\n345;\n456;\n567;\ntest4\"").Output()

    if err != nil {
        fmt.Println(err)
        return
    }

    // Replace escaped line breaks with real line breaks
    output = bytes.Replace(output, `\n`, []byte("\n"), -1)

    // Parse the corrected string line by line
    scanner := bufio.NewScanner(bytes.NewReader(output))
    for scanner.Scan() {
        line := scanner.Text()
        fmt.Println(strings.TrimSpace(line)) // Trim leading/trailing whitespace
    }
}
Nach dem Login kopieren

Ausgabe:

test1
123;
234;
345;
456;
567;
test4
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie behandelt man mehrdeutige Zeilenumbrüche in Go-Strings aus der „exec.Command'-Ausgabe richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage