如何在VIM中刪除重複出現的行 - Linux

Table of Contents

前提:
我在跑完模擬之後會產生一堆log檔,之後利用grep把含有error字串的file和message
抓到同一個檔裏

內容長的像下列的樣子
../sim1/nc01102011.log:@15345 error: AAAA
../sim1/nc01102011.log:@15354 error: BBBB
../sim2/nc01101654.log:@23487 error: AAAA
../sim3/nc01100812.log:@8927 error: DDDD
../sim3/nc01100812.log:@8990 error: CCCC
../sim3/nc01101923.log:@25687 error: BBBB

有時一個log中會同時有兩到三個error的message出現
不知道有沒有方法把有相同檔名的那行刪掉,只留第一個就好了?

我的想法是
:g/\(nc\d\+\)/;/&/d
先找到file name,再往下找相同的pattern,刪除
但是"&"在第二次search上無法作用

請問有人可以幫忙嗎?

(當然我可以寫個script解決這個問題,但是我想試試看能不能只用vi就解決了)

--

All Comments

Regina avatarRegina2009-01-14
用sed似乎比較好
Rebecca avatarRebecca2009-01-14
:%s/log.*/log/g
:%!sort -u