我正在尝试为朋友设置聊天记录格式,如下所示:
John Smith>你好Jane doe>嘿,你怎么样? John Smith>非常感谢
她希望将其格式化为:
John Smith>你好
Jane doe>嘿,你怎么样?
John Smith>非常感谢
只需在>之后输入新行不够好,因为它不能正确格式化,所以我需要在“>”之前插入一个新行3个空格或2个单词所以这个名字也被捕获了。
到目前为止,我在>之后只有一个新行:
/ usr / bin / perl -p -i -e“s /> /> \ n / g”* .txt
编辑:大约有20多个不同的聊天名称,所以如果没有输入他们的所有名字就可以做到这一点很好,因为它们可能会有所不同,我想从练习中学到很多乐趣。 感谢您的阅读
答案 0 :(得分:1)
试试这个:
perl -p -i -e "s/(\w+\s\w+\s*>)/\n\1/g" log.txt
我用于正则表达式的测试:
[21:21:23] ~ $ echo 'John Smith > hello Jane doe > hey how are you? John Smith > Pretty good thanks Susie Someone > hi guys' > log.txt
[21:21:24] ~ $ more log.txt
John Smith > hello Jane doe > hey how are you? John Smith > Pretty good thanks Susie Someone > hi guys
[21:21:27] ~ $ perl -p -i -e "s/(\w+\s\w+\s>)/\n\1/g" log.txt
[21:21:34] ~ $ more log.txt
John Smith > hello
Jane doe > hey how are you?
John Smith > Pretty good thanks
Susie Someone > hi guys
[21:21:37] ~ $
它确实在文件的开头添加了一个额外的换行符,但如果这不会打扰你,那么我认为它应该可行。
编辑:如果某人出于某种原因在其中一条消息中使用>
字符(如果前面有空格和两个单词),它也会失败。
答案 1 :(得分:0)
我知道你已经有了一个“足够好”的剧本。但无论如何,我以为我会提出另一种策略。
分两部分处理此任务。
第一部分:分析原始数据并提取用户名列表。
>
之前的重复单词组(最多X长度)。此处有人介入并批准用户名列表。
第二部分:根据用户名列表处理数据。
此过程的优点是您可以在最终输出中正确处理内联>
个字符。至少只要没有人输入有效的用户名后跟>
。
当然代码会更复杂。增加的复杂性是否值得提高准确性取决于您的需求。