删除特定模式中的换行符,但“斜杠”消失了

时间:2016-03-23 03:00:16

标签: regex bash sed

我有一个这样的文本文件(每行开头留下很多空格):

    2016/03/01
               6,015,511 +0.55 3,718
    2016/03/02
               4,584,160 -0.50 2,885
    2016/03/03
               5,509,856 0.00 718

目标是删除日期字符串之后的换行符,例如

    2016/03/01        6,015,511 +0.55 3,718
    2016/03/02        4,584,160 -0.50 2,885
    2016/03/03        5,509,856 0.00 718

使用

sed ':a;N;$!ba;s:\([[:digit:]]\S*\)\n:\1 :g'

导致所有行合并为一行。

在正则表达式中添加斜杠以删除日期字符串中的换行符

sed ':a;N;$!ba;s:\/\([[:digit:]]\S*\)\n:\1 :g'

结果是(日期字符串中的第一个斜杠消失了):

    201603/01        6,015,511 +0.55 3,718
    201603/02        4,584,160 -0.50 2,885
    201603/03        5,509,856 0.00 718

任何人都可以提示吗?

2 个答案:

答案 0 :(得分:2)

我想你想要的就是:

$ sed 'N;s/\n//' infile
    2016/03/01               6,015,511 +0.55 3,718
    2016/03/02               4,584,160 -0.50 2,885
    2016/03/03               5,509,856 0.00 718

这会将下一行添加到模式空间,然后删除换行符。

答案 1 :(得分:0)

尝试以下脚本:

sed 's/^\s*//;N;s/\n\s*/    /' data.txt 

2016/03/01    6,015,511 +0.55 3,718
2016/03/02    4,584,160 -0.50 2,885
2016/03/03    5,509,856 0.00 718

它从第一行删除所有前导空格,并在第一行和第二行之间插入合理的空格。