egrep不删除特殊字符

时间:2014-03-26 12:28:14

标签: regex linux grep

我遇到了egrep的问题,似乎省略了像!@#%这样的特殊字符。

目标是删除具有3个以上完全相同字符的行。每个字符都不需要各自。

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

以下是我正在使用的内容:

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

它适用于非特殊字符,但不会删除!!!qwqwqwq!等文件。

提前致谢。

2 个答案:

答案 0 :(得分:3)

使用这个:

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

(.)捕获任何字符,然后检查下一个是否有任何三个相同的字符(\1)。

答案 1 :(得分: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将打印出来。