仅删除特定行的新行/换行符

时间:2012-02-16 08:26:09

标签: regex sed awk newline

我有以下输出:

02:01:31
OFFLINE
02:02:31
ONLINE

我想成为:

02:01:31 OFFLINE
02:02:31 ONLINE

我找到了一种用sed ':a;N;$!ba;s/\n/ /g'删除所有换行符/换行符的方法,但是它给了我以下内容,这不是我真正想要的内容:

02:01:31 OFFLINE 02:02:31 ONLINE

问:如何仅为符合特定模式的行删除换行符/换行符(在这种情况下[0-9]就足够了?

PS:只要我可以将正则表达式模式应用于行的匹配,就不必与sed一起使用

2 个答案:

答案 0 :(得分:4)

让您的s/\n/ /g成为s/\([0-9]\S*\)\n/\1 /g(一个数字后跟任意数量的非空格,后跟换行符。)

答案 1 :(得分:1)

awk oneliner:

awk '/[0-9]$/{printf $0" ";next;}1'

试验:

kent$  echo "02:01:31
OFFLINE
02:02:31
ONLINE"|awk '/[0-9]$/{printf $0" ";next;}1'
02:01:31 OFFLINE
02:02:31 ONLINE