exec.Command を使用して Linux コマンドからの文字列出力を解析する場合、埋め込まれた「n」文字と実際の改行を区別することができます。
意図した改行を維持するには、次の点を考慮してください。テクニック:
埋め込まれた「n」文字が、実際には改行のエスケープされたバージョンである可能性があります。これを修正するには、エスケープされた "n" シーケンスを実際の改行に置き換えます。
output = strings.Replace(output, `\n`, "\n", -1)
バックティック (``) を使用して置換文字列を定義すると、必要に応じて複数行にまたがることができます。
エスケープされた改行が修正されたら、bufio.NewScanner を使用して解析できます。文字列全体を 1 行ずつ表示します:
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 中国語 Web サイトの他の関連記事を参照してください。