2014-03-26 43 views
2

我有一個egrep的問題,似乎忽略像[email protected]#%這樣的特殊字符。egrep不刪除特殊字符

的目標是消除有更多然後3個完全相同的字符線。角色不需要每個都是。

111!!!qqq! #should be removed because has 4 '!' 
!1!1!opop #is fine 

這裏是我使用的是什麼:

cat file1.txt | egrep -vi "^(.*)(.{3,})(.*)\2(.*)$" > file2.txt 

它適用於非特殊字符不錯,但它不會刪除像文件。

在此先感謝。

+0

我真的不認爲這是特殊字符的鏈接...你能提供你的測試用例嗎?你想只將正確的行打印到'file2',否則不正確的行? – Robin

回答

3

使用這一個:

cat input.txt | egrep -vi "(.).*\1.*\1.*\1" 

(.)是捕捉任何字符,然後選中任意三個相同的字符(\1)是否在明年。

+1

請注意,您可以直接執行'egrep ... input.txt',不需要'cat'。 – fedorqui

+3

這應該縮寫爲:'egrep'(。)(。* \ 1){3}'input.txt' – Toto

+1

您不應該使用'cat'將示例輸入到可以自己讀取數據的程序中。 – Jotne

0

您還可以使用awk來解決這個問題:

awk '{delete a;for (i=1;i<=NF;i++) if (++a[$i]>3) next}1' FS="" file 
!1!1!opop 

通過設置FS=""循環將在每行的字符運行。
然後它將這些信息存儲在一個名爲陣列a增加它和測試,如果它的更大然後3
如果其較大的,然後使用next跳到下一行。如果不跳過,1將打印它。