sed模式空间为何可包含换行符?基于官方手册的技术问询
关于sed模式空间换行符的疑问解答
从sed手册3.2节(sed命令摘要)可知:
D
若模式空间包含换行符,删除模式空间中首个换行符之前的文本,用剩余模式空间重启循环,不读取新输入行。
但手册6.1节(sed工作原理)说明:
……首先,sed从输入流读取一行,移除尾部换行符,将其放入模式空间……
核心原因:模式空间的换行符来自主动的多行合并操作
手册6.1描述的是sed单次读取单行的基础流程,但sed提供了专门的命令来打破单行限制,将多行内容合并到模式空间中,从而引入换行符:
N命令:这是最常见的场景。执行N时,sed会读取下一行输入,将其追加到当前模式空间末尾,并且在两行之间插入一个换行符。比如初始模式空间是行1内容(无尾换行),执行N后就变成行1内容\n行2内容,此时模式空间就包含了换行符,满足D命令的触发条件。- 其他命令的影响:比如
G命令会将保持空间的内容(若包含换行)追加到模式空间;或者使用s替换命令时,在替换文本中主动插入\n,也会让模式空间出现换行符。
简单来说,初始读取单行时模式空间确实没有换行符,但通过sed的多行操作命令,我们可以主动在模式空间中引入换行符,这也是D这类多行处理命令存在的前提。
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

