Go lang 区分 "\n" 和换行符

我正在尝试通过以下代码读取由 linux 命令生成的某些字符串输出:


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

以上是[]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行,并打印第二个内部字符串的内容而不是渲染它。


达令说
浏览 254回答 3
3回答

海绵宝宝撒

您的“\n”实际上可能是换行符的转义版本。您可以通过搜索转义版本并替换为非转义版本,用真正的换行符替换它们:strings.Replace(sourceStr, `\n`, "\n", -1)由于反引号内的字符串文字可以写在多行上,Go 会转义它看到的任何换行符。

米琪卡哇伊

“真实”和“非真实”换行符之间没有区别。如果您使用的是类 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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go