我有一些文本格式如下:
1 一项庄严肃穆富历史意义的仪式标志中华人民共和国对香港恢复行使主权。
2 英国皇储威尔斯亲王与中华人民共和国国家主席江泽民均在仪式上致辞,仪式於六月三十日午夜至七月一日凌晨举行,并向全世界直播。
3 仪式在香港会议展览中心新翼大厅举行,约四千名嘉宾出席,包括来自四十多个国家和国际性组织的外交部长和知名人士,以及约四百名各国传媒
代表。
这是一个超大文档的一部分。
我想做的是删除句子开始前的所有内容,即所有空格和行号,同时保留句子的完整性。
在Linux上如何快速有效地做到这一点?
另一个挑战是,有些句子已经被拆开,移到较低的行,这是有问题的,理想情况下,我想把这些成分重新附加到它们来自的句子上,也就是直接在它们上面的句子上。以上例子的最后一句话就是例证。
我想这可以用regex或sed完成,但我对这些工具很陌生。
也许作为一个预处理步骤,有一个命令可以把前面没有空格和数字的所有内容放到一个新的行上,并将其附加到上面的行的末尾?
最佳答案
两个问题的完整解决方案都可以使用Perl完成:
$ perl -pe 's/\n//;s/^[\s\d]+/\n/a;' file
一项庄严肃穆富历史意义的仪式标志中华人民共和国对香港恢复行使主权。
英国皇储威尔斯亲王与中华人民共和国国家主席江泽民均在仪式上致辞,仪式於六月三十日午夜至七月一日凌晨举行,并向全世界直播。
仪式在香港会议展览中心新翼大厅举行,约四千名嘉宾出席,包括来自四十多个国家和国际性组织的外交部长和知名人士,以及约四百名各国传媒代表。
但有两个注意事项:
在开头插入一个空行。
最后一个换行符被删除。
如果你能忍受这两个限制,那么上面的解决方案就会奏效。其工作方式如下:
首先,它将换行符从行尾移除。
然后,如果行以一系列空格和数字开头(修饰符使
/a
和\d
只匹配ascii数字和空格),则用换行符替换。关于regex - 使用linux重新格式化屠宰文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27958102/