首頁 >後端開發 >Golang >如何正確處理'exec.Command”輸出中 Go 字串中不明確的換行符?

如何正確處理'exec.Command”輸出中 Go 字串中不明確的換行符?

Susan Sarandon
Susan Sarandon原創
2024-11-28 21:21:15872瀏覽

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

處理Go 字串中不明確的換行符

使用exec.Command 解析Linux 指令的字串輸出時,可以區分嵌入的「n」字元和實際換行符具有挑戰性。

要保持預期的換行符,請考慮以下事項技術:

轉義換行符

嵌入的「n」字元實際上可能是換行符的轉義版本。要修正此問題,請將轉義的「n」序列替換為真正的換行符:

output = strings.Replace(output, `\n`, "\n", -1)

透過使用反引號(``) 定義替換字串,如有必要,您可以將其跨越多行。

逐行解析

轉義換行符改正後,就可以使用bufio.NewScanner 來解析整個字串逐行:

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

此方法只會在實際換行符處拆分字串,保留行內容中任何嵌入的「n」字元。

範例

以下範例示範了此方法:

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
    }
}

輸出:

test1
123;
234;
345;
456;
567;
test4

以上是如何正確處理'exec.Command”輸出中 Go 字串中不明確的換行符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn