我遇到了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!
等文件。
提前致谢。
答案 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
将打印出来。