Lors de l'analyse de la sortie de chaîne d'une commande Linux à l'aide de exec.Command, la distinction entre les caractères "n" intégrés et les sauts de ligne réels peut être un défi.
Pour conserver les sauts de ligne prévus, envisagez la technique suivante :
Il est possible que les caractères « n » intégrés soient en fait des versions échappées des sauts de ligne. Pour remédier à cela, remplacez les séquences "n" échappées par de vrais sauts de ligne :
output = strings.Replace(output, `\n`, "\n", -1)
En utilisant des guillemets (``) pour définir la chaîne de remplacement, vous pouvez l'étendre sur plusieurs lignes si nécessaire.
Une fois les sauts de ligne échappés corrigés, vous pouvez utiliser bufio.NewScanner pour analyser la chaîne entière ligne par ligne :
scanner := bufio.NewScanner(strings.NewReader(output)) for scanner.Scan() { line := scanner.Text() fmt.Println(line) }
Cette approche divisera uniquement la chaîne au niveau des sauts de ligne réels, en préservant tous les caractères « n » incorporés dans le contenu de la ligne.
L'exemple suivant illustre l'approche :
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 } }
Sortie :
test1 123; 234; 345; 456; 567; test4
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!