2015-08-17 51 views
0

我試圖讀出由下面的代碼通過Linux命令產生某些串輸出:轉到郎區分「 n」個和行中斷

out, err := exec.Command("sh", "-c", cmd).Output() 

上面out是[]byte類型的,如何可以區分「 \ n「字符包含在真正換行符的行內容中嗎?我試圖

strings.Split(output, "\n") 

bufio.NewScanner(strings.NewReader(output)) 

但每當看到 「\ n」 字符他們都分裂了整個字符串緩衝區。

行,澄清的,「虛幻」中斷是包含在一個字符串中的「\ n」字符如下, Print first result: "123;\n234;\n" Print second result: "456;\n"

整個輸出是一個大的多行字符串,它也可以包含一些其他引用的字符串,我正在處理我的go程序中的整個字符串輸出,但我無法控制命令輸出並在「\ n」字符前添加反斜槓。

進一步說明:我打算處理包含字符串串的字節序列,並且要保留內部字符串中包含的「\n」,並使用外層「\n」來斷開線。因此,對於以下字節序列:

First line: "test1" 
Second line: "123;\n234;\n345;" 
Third line: "456;\n567;" 
Fourth line: "test4" 

我想在處理整個序列時得到3行,而不是獲得7行總數。這是一箇舊的項目,但我記得我可以使用Python直接使用「for line in f」之類的語法獲得3行,並打印第二個內部字符串的內容而不是渲染它。

+5

什麼是「真正的換行符」?什麼時候是「\ n」「虛幻」換行符? – Volker

+5

根據操作系統(和/或文件格式),換行符是'\ n',或者是\ r \ n',或者是'\ r'。沒有什麼可以「區分」;那個字節(或字節對在'\ r \ n'的情況下)*是換行符。如果你碰巧指的是「\」字符後跟「n」,你可以用Go來寫成'\\ n「'或者一個反引用的字符串(我不知道如何在SO中正確顯示)降價)。 –

回答

6

「真實」和「虛幻」換行符沒有區別。

如果您使用的是類Unix系統,則文本文件中行的末尾用LF或'\n'字符表示。一行中間不能有'\n'字符。

內存中的字符串可以包含儘可能多的'\n'字符。字符串"foo\nbar\n"在寫入文本文件時將創建兩行,分別爲"foo""bar"

fmt.Println("foo") 
fmt.Println("bar") 

fmt.Printf("foo\nbar\n") 

兩個打印的2線相同的序列實際上沒有任何區別,一樣的:

fmt.Println("foo\nbar") 
+0

downvoter是否會關注評論? –

3

這有可能是你的「 \ n「實際上是換行符的轉義版本。您可以通過搜索轉義版本,並與非替換成真正的換行符替換這些轉義版本:

strings.Replace(sourceStr, `\n`, "\n", -1)

由於內部反引號字符串文字可以寫多行,去逃避任何換行符它看到。