![合并多行直到字符序列](https://linux22.com/image/94240/%E5%90%88%E5%B9%B6%E5%A4%9A%E8%A1%8C%E7%9B%B4%E5%88%B0%E5%AD%97%E7%AC%A6%E5%BA%8F%E5%88%97.png)
如果消息字符串没有结尾,则尝试合并多行。还想删除除第一行之外的所有行上的前缀。
输入:
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 awk
1
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,\}
和各种其他调整之后)