合并多行直到字符序列

合并多行直到字符序列

如果消息字符串没有结尾,则尝试合并多行。还想删除除第一行之外的所有行上的前缀。

输入:

b929e3e1-29db this is a long message that
abc074df-48a1 is continued onto multiple
dfd4c683-ab48 lines#EOM
ff513a72-570d this is a short message#EOM
980d10aa-bbed another short message#EOM

输出:

b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message

最好使用通过命令行提供的常用工具。 (例如:awk、sed)

答案1

与 GNU awk1

gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
  • 将记录分隔符设置为#EOM后跟换行符
  • 删除换行符前面的十六进制数字和连字符序列;这保留了每条记录的初始序列,因为它的换行符被前一个 RS 吃掉了
  • 重新分配字段$1=$1以强制使用默认输出分隔符重新评估记录
  • 打印记录(因为1是真的)

测试

$ gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message


1 .mawk由于我不明白的原因,它似乎不适用于,即使在替换+\{1,\}和各种其他调整之后)

相关内容