Linux命令使用正则表达式将多行合并为单行

时间:2019-05-23 16:47:34

标签: bash awk sed

我有一个文件,我想在其中找到该行的第一次出现的日期(例如正则表达式),直到触发下一个日期为止,我需要将这些行合并为一行, ,使用linux命令而不是任何编程语言。

注意:下次触发的日期也应该是新行的首次出现。

简而言之,我需要借助linux命令(例如sed,awk或任何其他),使用正则表达式模式将多行合并为一行。

我尝试使用sed和awk linux命令,但是没有成功。其他任何linux命令也都可以。

例如

date1 Hey.. This is Joe 
Fernandis.
date2 I live in Panjim, 
Goa date3 
what about you? 
date4 have a great day ahead 

输出应为:

date1 Hey.. This is Joe Fernandis. 
date2 I live in Panjim, Goa date3 what about you? 
date4 have a great day ahead 

2 个答案:

答案 0 :(得分:0)

$ awk '{printf "%s%s", (/^date/ ? ors : OFS), $0; ors=ORS} END{print ""}' file
date1 Hey.. This is Joe  Fernandis.
date2 I live in Panjim,  Goa date3  what about you?
date4 have a great day ahead

由于您没有告诉我们这是什么,也没有在示例中显示任何内容,因此您必须自己弄清楚日期格式的正则表达式。

答案 1 :(得分:0)

这可能对您有用(GNU sed):

sed '/^date/{:a;N;/\ndate/!s/\n//;ta;P;D}' file

如果一行以日期开头,请追加下一行;如果该行不是以日期开头,则删除两行之间的换行符,然后重复。否则,请打印/删除第一行并重复。

如果文件的第一行始终是日期,请使用:

sed ':a;N;/\ndate/!s/\n//;ta;P;D' file