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