Regex egrep不删除特殊字符

Regex egrep不删除特殊字符,regex,linux,grep,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 提前感谢

我对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

提前感谢。

使用这个:

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

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

您也可以使用
awk
解决此问题:

awk '{delete a;for (i=1;i<=NF;i++) if (++a[$i]>3) next}1' FS="" file
!1!1!opop
awk'{delete a;for(i=1;i3)next}1'FS=”“文件
!1.1.opop
通过设置
FS=”“
循环将针对行中的每个字符运行。
然后它将把它存储在一个名为
a
的数组中,并测试它是否大于
3


如果较大,则使用
next
跳到下一行。如果没有跳过,
1
将打印它。

我真的不认为这是指向特殊字符的链接。。。你能提供你的测试用例吗?您想只将正确的行打印到
file2
,还是打印不正确的行?注意,您可以直接执行
egrep。。。input.txt
,不需要
cat
。这应该缩短为:
egrep'()(.*\1){3}input.txt
您不应该使用
cat
将数据输入到可以自己读取的程序中来发布示例。@Jotne I只更正了OP的正则表达式。我知道基本的linux命令,但没有你们这么强大。