Go lang区分“\\n”和换行符

新手上路,请多包涵

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

 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"

整个输出是一个多行的大字符串,它可能还包含一些其他带引号的字符串,我正在我的程序中处理整个字符串输出,但我无法控制命令输出并在“之前添加反斜杠\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 行,并打印第二个内部字符串的内容而不是渲染它。

原文由 Rain Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

“真实”和“不真实”的换行符之间没有区别。

如果您使用的是类 Unix 系统,则文本文件中的行尾由 LF 或 '\n' 字符表示。一行中间不能有 '\n' 字符。

内存中的字符串可以包含任意多的 '\n' 字符。字符串 "foo\nbar\n" 写入文本文件时,将创建两行, "foo""bar"

之间没有有效区别

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

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

两者都打印相同的两行序列,如下所示:

 fmt.Println("foo\nbar")

原文由 Keith Thompson 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的“\n”可能实际上是换行符的转义版本。您可以通过搜索转义版本并替换为非转义版本,将它们替换为真正的换行符:

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

由于反引号内的字符串文字可以写在多行上,因此 Go 会转义它看到的任何换行符。

原文由 Mal Curtis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题