【发布时间】:2015-11-09 15:40:52
【问题描述】:
我正在尝试通过以下代码读取 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 行,然后打印第二个内部字符串的内容而不是渲染它。
【问题讨论】:
-
什么是“真正的换行符”? “\n”什么时候是“不真实”的换行符?
-
根据操作系统(和/或文件格式),换行符是
\n,或者是\r\n,或者是\r。没有什么可以“区分”的;该字节(或\r\n的情况下的字节对)是换行符。相反,如果您碰巧指的是“\”字符后跟“n”,则可以在 Go 中将其写为"\\n"或反引号文字字符串(我无法弄清楚如何在 SO 的降价中正确显示)。