Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengendalikan Pemisahan Talian Ambiguous dalam Go Strings daripada Output `exec.Command` dengan betul?

Bagaimana untuk Mengendalikan Pemisahan Talian Ambiguous dalam Go Strings daripada Output `exec.Command` dengan betul?

Susan Sarandon
Lepaskan: 2024-11-28 21:21:15
asal
915 orang telah melayarinya

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

Mengendalikan Putus Talian Ambiguous dalam Rentetan Go

Apabila menghuraikan output rentetan daripada arahan Linux menggunakan exec.Command, membezakan antara aksara "n" terbenam dan pemisah baris sebenar boleh menjadi mencabar.

Untuk mengekalkan pemisah baris yang dimaksudkan, pertimbangkan perkara berikut teknik:

Escaped Line Breaks

Ada kemungkinan bahawa aksara "n" yang dibenamkan sebenarnya adalah versi pelarian bagi barisan. Untuk membetulkan ini, gantikan urutan "n" yang terlepas dengan pemisah baris sebenar:

output = strings.Replace(output, `\n`, "\n", -1)
Salin selepas log masuk

Dengan menggunakan tanda belakang (``) untuk mentakrif rentetan gantian, anda boleh merentangkannya pada berbilang baris jika perlu.

Penghuraian Baris demi Baris

Setelah pemisah baris yang terlepas dibetulkan, anda boleh menggunakan bufio.NewScanner untuk menghuraikan keseluruhan rentetan baris demi baris:

scanner := bufio.NewScanner(strings.NewReader(output))
for scanner.Scan() {
    line := scanner.Text()
    fmt.Println(line)
}
Salin selepas log masuk

Pendekatan ini hanya akan membelah rentetan pada pemisah baris sebenar, mengekalkan sebarang aksara "n" terbenam dalam kandungan baris.

Contoh

Contoh berikut menunjukkan pendekatan:

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
    }
}
Salin selepas log masuk

Output:

test1
123;
234;
345;
456;
567;
test4
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Pemisahan Talian Ambiguous dalam Go Strings daripada Output `exec.Command` dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan