考虑到 OP 规范:sed join lines together,这个 answer 的评级令人惊讶 ;s(这个令人惊讶的眨眼表情符号双关语 sed 替换是故意的):sed join lines together。
这个submission's最后评论
“如果是这样,请检查 @ninjalj 提交的内容”
还建议检查same answer。
即。使用sed ':a;/0$/{N;s/\n//;ba}'逐字检查
sed ':a;/0$/{N;s/\n//;ba}'
does
no one
ie. 0
people,
try
nothing,
ie. 0
things,
any more,
ie. 0
tests?
(^D aka eot 004 ctrl-D ␄ ... bash generate via: echo ^V^D)
不会给出(做测试;):
does no one ie. 0
people, try nothing, ie. 0
things, any more, ie. 0
tests? (^D aka eot 004 ctrl-D ␄ ... bash generate via: echo ^V^D)
要得到这个用途:
sed 'H;${z;x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
或:
sed ':a;/0$/!{N;s/\n//;ba}'
不是:
sed ':a;/0$/{N;s/\n//;ba}'
注意事项:
sed 'H;${x;s/\n//g;p;};/0$/!d;z;x;s/\n//g;'
不使用分支和
等同于:
sed '${H;z;x;s/\n//g;p;};/0$/!{H;d;};/0$/{H;z;x;s/\n//g;}'
-
H 开始所有序列
-
d 使当前行上的进一步脚本命令执行短路并开始下一个循环,因此/0$/! 之后的地址选择器只能是/0$/!!,因此
/0$/{H;z;x;s/\n//g;} 的地址选择器是多余的,不需要。李>
- 如果一行不以 0 结尾,则将其保存在保留空间中
/0$/!{H;d;}
- 如果一行确实以 0 结尾,也保存它,然后打印冲洗(双关,即清除并对齐行)
/0$/{H;z;x;s/\n//g;}
- 注意
${H;z;x;s/\n//g;p;} 使用/0$/ ... 命令和一个额外的p 来强制最终打印和现在不需要的z(用于清空和重置像s/.*// 这样的模式空间)