带有N选项的sed多线跳过线

时间:2014-11-05 00:12:17

标签: bash sed multiline

我使用SED和N选项三个字符串,他错过了最后一个字符串。 如果行数偶数则一切正常

示例文字:

this is the first line   
this is the second line
this is the third line

sed 'N;s/^.*\(first.*\)\n\(second.*$\)/\1\2/;s/ //g'

我想要

  

thisisthefirstline的 thisisthesecondline
  thethirdline

但我得到

  

thisisthefirstline的 thisisthesecondline
  第三行

未处理最后一行 sed跳过这个下标

s/ //g

四行好吗

this is the first line   
this is the second line
this is the third line
this is the fourth line

thisisthefirstline**thisisthesecondline**
thisisthethirdline
thisisthefourthline
奇数行的

并不总是在最后一行处理

一个简单的解决方案 - 使用管道

sed 'N;s/^.*\(first.*\)\n\(second.*$\)/\1\2/' | sed 's/ //g'     

但我会在没有管道的情况下这样做

1 个答案:

答案 0 :(得分:1)

因为sed最后看到它不能为你所以它不处理它,只是在最后一行没有N就像:

sed '$!N;s/^.*\(first.*\)\n\(second.*$\)/\1\2/;s/ //g'

$表示最后一行,而且!意思是不 - 所以$!N表示N,除了最后一行。

此外,我推测你想要N问题的答案,但实际上你不需要N来做你正在做的事情,这就足够了:

sed 's/^.*\(first.*\)\n\(second.*$\)/\1\2/;s/ //g'