ホームページ > バックエンド開発 > Golang > 「exec.Command」出力の Go 文字列におけるあいまいな改行を適切に処理する方法は?

「exec.Command」出力の Go 文字列におけるあいまいな改行を適切に処理する方法は?

Susan Sarandon
リリース: 2024-11-28 21:21:15
オリジナル
857 人が閲覧しました

How to Properly Handle Ambiguous Line Breaks in Go Strings from `exec.Command` Output?

Go 文字列内のあいまいな改行の処理

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート