什么是换行符 - '\n'

xyz*_*xyz 9 c unix vim newline sed

这是一个非常基本的概念,但我从来没有能够很清楚地表达出来.我想拼写它,看看我哪里出错了.

如果必须,我将如何定义"换行符".如果我在unix(或windows)中创建一个新文件,那么该文件通过在名为"new line character"的文件中插入一个特殊字符来存储"行尾"信息.如果是这样,它的ascii值是多少?我记得在C程序中,我已经检查了符号'\n'的读取字符.为什么这个令人困惑的2个字符代表行尾字符..

bash$ cat states
California
Massachusetts
Arizona
Run Code Online (Sandbox Code Playgroud)

说,我想在行之间插入一个行间距,并希望输出表格:所需的输出:

California

Massachusetts

Arizona

bash$sed -e 's/\n/\n\n/g' states  does not work.
Run Code Online (Sandbox Code Playgroud)

为什么我不能在这里对待"新行字符"就像我会对待任何其他字符并运行类似上面命令的东西一样.(我知道有人可能会说这是sed的语法问题,但是请一个人解释一下不允许这样做的直觉,这样我就可以摆脱困惑.

同样,在vim编辑器中,我不能使用:%s/\n/\n \n/g.为什么这样?

我是否需要通过在sed和vim中使用反斜杠来进一步逃脱?

谢谢,

Jagrati

i_a*_*orf 11

NewLine(\n)为10(0xA),CarriageReturn(\ r)为13(0xD).

不同的操作系统为文件选择了不同的行尾表示.Windows使用CRLF(\ r \n).Unix使用LF(\n).较旧的Mac OS版本使用CR(\ r),但OS X切换到Unix角色.

这是一个相对有用的FAQ.

  • OS 9使用`\ r`; 他们把它放在OS X中并切换到匹配的Unix (10认同)
  • +1 @Michael,OS X当然不会使用`\ r``. (4认同)

Car*_*rum 11

sed手册页:

通常,sed将一行输入(不包括其终止换行符)循环复制到一个模式空间中(除非在"D"函数之后还有一些东西),应用所有带有选择该模式空间的地址的命令,副本标准输出的模式空间,附加换行符,并删除模式空间.

它在没有换行符的情况下在线路上运行,因此你所拥有的模式无法匹配.你需要做一些其他的事情 - 比如对阵$(线下)或^(线下).

这是一个对我有用的例子:

$ cat > states
California
Massachusetts
Arizona
$ sed -e 's/$/\
> /' states
California

Massachusetts

Arizona
Run Code Online (Sandbox Code Playgroud)

我后输入文字换行字符\sed行.


Cog*_*eel 5

转义字符取决于系统正在解释它们.\n被许多编程语言解释为换行符,但这并不一定适用于您提到的其他实用程序.即使他们确实将其\n视为换行符,也可能会有其他一些技巧让他们按照您的意愿行事.您必须查阅他们的文档(或在此处查看其他答案).

对于DOS/Windows系统,换行符实际上是两个字符:回车符(ASCII 13,AKA \r),后跟换行符(ASCII 10).在Unix系统(包括Mac OSX)上,它只是换行.在较旧的Mac上,这是一次回程.