首页 >后端开发 >Golang >如何正确处理'exec.Command”输出中 Go 字符串中不明确的换行符?

如何正确处理'exec.Command”输出中 Go 字符串中不明确的换行符?

Susan Sarandon
Susan Sarandon原创
2024-11-28 21:21:15858浏览

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