sed连接在一起

什么是sed(或其他工具)命令连接在一起的文件,不结束字符'0'的文件?

我会有这样的线

412 | n |领导build筑材料|||||||||| d | d | 20 || 0

这需要单独留下,然后我会有这样的行(这是3行,但只有一个结束瓦特/ 0)

107 | n |打结捆绑工具|||||打结捆绑工具

||||| d | d | 0 || 0

需要连接/组合成一条线

107 | n |打结捆绑工具|||||打结捆绑工具||||| d | d | 0 || 0

Solutions Collecting From Web of "sed连接在一起"

sed ':a;/0$/{N;s/\n//;ba}' 

在循环中(分支ba标签:a ),如果当前行以0( /0$/ )结尾,则追加下一行( N )并删除内部换行符( s/\n// )。

AWK:

 awk '{while(/0$/) { getline a; $0=$0 a; sub(/\n/,_) }; print}' 

Perl的:

 perl -pe '$_.=<>,s/\n// while /0$/' 

庆典:

 while read line; do if [ ${line: -1:1} != "0" ] ; then echo $line else echo -n $line fi done 

awk可能也很短:

 awk '!/0$/{printf $0}/0$/' 

测试:

 kent$ cat t #aasdfasdf #asbbb0 #asf #asdf0 #xxxxxx #bar kent$ awk '!/0$/{printf $0}/0$/' t #aasdfasdf#asbbb0 #asf#asdf0 #xxxxxx#bar 

如果以0存储结束,则删除换行符

 sed '/0$/!N;s/\n//' 

一个典型的神秘Perl单线程:

 perl -pe 'BEGIN{$/="0\n"}s/\n//g;$_.=$/' 

这使用序列“0 \ n”作为记录分隔符(通过你的问题,我假设每一行应该以零结束)。 任何记录都不应该有内部换行符,所以这些被删除,然后打印行,追加被删除的0和换行符。

另一个问题是要确保每行有17个管道分隔的字段。 这并不假定第17个字段值必须为零。

 awk -F \| ' NF == 17 {print; next} prev {print prev $0; prev = ""} {prev = $0} ' 

这个答案的评级是令人惊讶的;s (在sed替代这个惊讶的表情双关是有意的)给予OP规范: sed连接在一起的行 。

这是提交的最后一条评论

“如果是这种情况,请检查@ninjalj提交的内容”

也建议检查相同的答案 。

即。 使用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;}
  • NB ${H;z;x;s/\n//g;p;}使用/0$/ ...命令和一个额外的p来强制最终的打印和现在不需要的z (清空和重置模式空间像s /.*//)