一尘不染

转到lang区分“ \ n”和换行符

go

我正在尝试通过以下代码读取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行,并打印第二个内部字符串的内容,而不用渲染它。


阅读 290

收藏
2020-07-02

共1个答案

一尘不染

“真实”和“虚幻”换行符之间没有区别。

如果您使用的是类似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")
2020-07-02