2015-05-29 70 views
1

我與形式的很多重複的文件無法創建SED替代刪除重複文件

a 
a 
b 
b 
c 
c 

,我需要減少

a 
b 
c 

所以我寫了一個sed命令:sed -r 's/^(.*)$\n^(.*)$/\1/mg' filename,但該文件仍然顯示重複。不過,我相信這個正則表達式的工作原理,因爲我測試了它here

那麼我做錯了什麼?

我懷疑它可能與-r選項有關,因爲我不太確定那是幹什麼的(但是沒有它,我得到一個invalid reference \1 on的命令的RHS錯誤)。

+0

預期結果是:'a \ na \ nb \ na \ na'? –

+0

@CasimiretHippolyte'a \ nb \ na' –

+0

文件是否總是被排序?如果是這樣,請使用'uniq'。如果不是,並且生成的文件被允許以排序(非原始)順序,則可以使用'sort -u'。 – Mort

回答

2

2種較簡單的方法都適用於您。

簡單awk命令打印一行僅第一次通過保持已打印的行的陣列:

awk '!seen[$0]++' file 
a 
b 
c 

由於文件已經排序可以使用uniq也:

uniq file 
a 
b 
c 

編輯:較新的gnu-awk版本支持在位編輯也使用:

awk -i 'inplace' '!seen[$0]++' file 
+0

'uniq'有'sed -i'這樣的一個inplace選項嗎? –

+0

可能不是更新的'awk'版本有就地編輯的選項。 – anubhava