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

Bash 使用正则表达式将多行合并为单行的Linux命令,bash,awk,sed,Bash,Awk,Sed,我有一个文件,在其中我想找出第一行出现的日期(例如regex),在触发下一个日期之前,我需要使用linux命令&而不是任何编程语言,将这些行合并成一行,这行将位于两行之间 注意:将触发的下一个日期也应该是新行的第一个出现日期 简而言之,我需要在linux命令(例如sed、awk或任何其他命令)的帮助下,使用regex模式将多行合并成单行 我尝试过使用sed和awk-linux命令,但没有成功。任何其他linux命令也可以 例如 输出应为: date1 Hey.. This is Joe Fern

我有一个文件,在其中我想找出第一行出现的日期(例如regex),在触发下一个日期之前,我需要使用linux命令&而不是任何编程语言,将这些行合并成一行,这行将位于两行之间

注意:将触发的下一个日期也应该是新行的第一个出现日期

简而言之,我需要在linux命令(例如sed、awk或任何其他命令)的帮助下,使用regex模式将多行合并成单行

我尝试过使用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 
您必须自己计算出任何日期格式的实际regexp,因为您没有告诉我们它是什么,也没有在示例中显示任何内容。

这可能适合您(GNU-sed):

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

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

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

sed/awk(以及shell本身)仍然是编程语言。我已经用您评论中提到的更改更新了您的问题。什么是<代码> DATE1/代码>,代码> DATE2/代码>等等?格式……所以DATE1,DATE2可以是任何正则表达式,你可以考虑。比如它可以是DD-MM -YYYY或DD/MM/YYYYOK……还有一件事我们可以考虑DATE3。现在我们能做到吗?为什么在输出之后有一个“FrnANDIS”的断线?
$ 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
sed '/^date/{:a;N;/\ndate/!s/\n//;ta;P;D}' file
sed ':a;N;/\ndate/!s/\n//;ta;P;D' file