9

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

pattern
XXXXXX
YYYYYY

这是输出:

 XXXXXXYYYYYY
4

2 回答 2

20

使用 sed 可以:

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

解释

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

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

sed -n '/pattern/ {x; N; N; s/\n//g; p;}'
于 2012-08-31T09:29:24.360 回答
1

在 Windows 上验证:

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

根据Multiline sed replace更正

于 2012-08-31T09:36:28.967 回答