2010-08-10 75 views
1

我試圖格式化聊天記錄的一個朋友說,像這樣插入新行3個空格或2個字:如何之前特定字符

約翰·史密斯>你好李四>哎你怎麼樣?約翰·史密斯>還不錯感謝

,她希望像這樣格式化:

約翰·史密斯>你好

李四>哎你怎麼樣?

約翰·史密斯>還不錯感謝

只需進入一個新行>爲後還不夠好,因爲它不會正確地格式化,所以我需要先插入一個新行3個空格,或2個字的「>」所以名字也被捕獲。

到目前爲止,我只是有一個新的生產線後,>:

在/ usr/bin中/ perl的-p -i -e 「S /> /> \ N/G的」 * .txt

編輯:大約有20多個不同的聊天名稱參與其中,所以如果不輸入所有的名字,這樣做會很好,因爲它們可能會有所不同,我想從練習中學習以獲得樂趣。 感謝您閱讀

+0

這僅僅是兩個人之間的即時消息日誌嗎?有一種相當簡單的方法可以處理您知道日誌中的用戶名的情況。 – eldarerathis 2010-08-10 01:15:26

+0

這是一個包含20個左右不同名稱的羣聊,所以我試圖避免輸入所有名稱,因爲它們可能會隨着每個會話而略有不同。這是一個蹩腳的網絡界面,只允許選擇文本和複製粘貼,但它不保留格式化... – 2010-08-10 01:18:41

+0

所以用戶名總是兩個單詞,兩個單詞之間有一個空格,第二個單詞和' >'? – eldarerathis 2010-08-10 01:22:05

回答

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] ~ $ 

它確實增加了額外的換行符的文件的開頭,但如果沒有按別打擾你,我認爲它應該起作用。

編輯:如果某人因某種原因(如果前面有一個空格和兩個單詞的話)在其中一個消息中使用了>字符,它也會失敗。

+0

非常感謝你! – 2010-08-10 01:30:04

+0

是的,在罕見的情況下,任何這些打嗝出現手動編輯將罰款,但它是更好的,然後她通過每一行和手動編輯! :) – 2010-08-10 01:36:26

+0

什麼情況下複製文本? John Smith> Jane Doe> Jane Doe的名字/文本,由John Smith複製/粘貼。「它只是一個空白的John Smith行,然後是Jane Doe。你有能力控制創建日誌的應用程序嗎? – vol7ron 2010-08-10 06:23:33

0

我知道你已經有了一個足夠好的腳本。但我認爲我會建議一種替代策略。

將此任務分爲兩部分。

第一部分:分析原始數據並提取用戶名稱列表。

  • 尋找位於>之前的重複字組(最長爲X長度)。
  • 生成可能的用戶名稱列表。

在這裏,一個人步入並批准用戶名列表。

第二部分:根據用戶名列表處理數據。

  • 處理文件和匹配用戶名使用作爲分隔符

這個過程的好處是,你可以在你的最終輸出正確處理內嵌>字符。至少只要沒有人輸入有效的用戶名,然後輸入>即可。

當然代碼會更復雜。增加的複雜性是否值得提高準確度取決於您的需求。

相關問題