为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
达令说 2021-11-01 15:47:14
我正在尝试通过以下代码读取由 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行,并打印第二个内部字符串的内容而不是渲染它。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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

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

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


查看完整回答
反对 回复 2021-11-01
?
米琪卡哇伊

TA贡献1998条经验 获得超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")


查看完整回答
反对 回复 2021-11-01
  • 3 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信