Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Pemisahan Talian Ambiguous dalam Go Strings daripada Output `exec.Command` dengan betul?
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:
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)
Dengan menggunakan tanda belakang (``) untuk mentakrif rentetan gantian, anda boleh merentangkannya pada berbilang baris jika perlu.
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) }
Pendekatan ini hanya akan membelah rentetan pada pemisah baris sebenar, mengekalkan sebarang aksara "n" terbenam dalam kandungan baris.
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 } }
Output:
test1 123; 234; 345; 456; 567; test4
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!