使用 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中文网其他相关文章!