sed在模式后合并2行

时间:2012-08-31 09:24:43

标签: regex sed

我想在使用sed的模式后合并两行(没有awk因为我使用的是windows) 所以例如这里是输入

pattern
XXXXXX
YYYYYY

这是输出:

 XXXXXXYYYYYY

2 个答案:

答案 0 :(得分:18)

用sed工作:

sed -n '/pattern/ {s/.*//; N; N; s/\n//g; p;}'

解释

  • /pattern/匹配模式并执行大括号{ }
  • s/.*//从模式空间中删除模式,删除模式的更简短但更模糊的方法是交换模式空间并使用{保持空间{1}}命令。
  • x从输入文件中获取下一行并将其附加到模式空间。
  • N从模式空间中删除所有换行符和回车符。
  • s/[\r\n]//g打印图案空间。

组合3行的稍微简短的解决方案是:

p

答案 1 :(得分:1)

在Windows上验证:

sed -r '1h; 1!H; ${ g; s/pattern[\r\n]+(.*)[\r\n]+(.*)/\1\2/ p}' infile

根据Multiline sed replace

进行了更正