如何在特定字符之前插入新的第3行空格或2个单词

时间:2010-08-10 01:04:32

标签: perl insert character newline

我正在尝试为朋友设置聊天记录格式,如下所示:

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多个不同的聊天名称,所以如果没有输入他们的所有名字就可以做到这一点很好,因为它们可能会有所不同,我想从练习中学到很多乐趣。 感谢您的阅读

2 个答案:

答案 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长度)。
  • 生成可能的用户名列表。

此处有人介入并批准用户名列表。

第二部分:根据用户名列表处理数据。

  • 处理文件并匹配用户名以用作分隔符

此过程的优点是您可以在最终输出中正确处理内联>个字符。至少只要没有人输入有效的用户名后跟>

当然代码会更复杂。增加的复杂性是否值得提高准确性取决于您的需求。