我希望标题足以说明我需要的帮助,但我会更详细地说明。
我有一个文本文件,每行包含7个字符长的字符串。字符串如下所示:
aaaaaad
aaabbbd
AAaa123
AkLmbB3
此文件包含这7个字符长的字符串中的数十万个,我需要删除任何包含太多按顺序排列的相同字符的行。例如:
aaaaLu1 <-- Remove this, because there is 4 `a` characters next to each other.
aaBaa1b <-- Keep this line
bbbb1Lk <-- Remove this line, because there is 4 `b` characters next to each other.
bababab <-- Keep this line, as the `b` characters aren't next to each other, even though there is 4 of them.
是否可以通过GNU + Linux命令行执行此操作?也许使用grep或sed的正则表达式?我在Internet上四处寻找grep正则表达式,但是它们通常只检查一行中有多少个相同字符,而不检查它们是否按顺序排列。如果有什么比使用正则表达式(可以自动运行并可以从基于Linux的发行版运行)更有效的方法,我愿意接受这样的建议。
我目前正在使用Manjaro Linux。
谢谢!
答案 0 :(得分:1)
获取任何字符(.)
,对其进行回引用\1
,然后查看是否再出现3次{3}
。例如,使用ag
,它使用perl regex:
ag -sv '(.)\1{3}'
答案 1 :(得分:1)
使用gnu sed
可以使用以下命令:
sed -E '/([[:alnum:]])\1{3}/d' file
aaBaa1b
bababab
其中file
是:
cat file
aaaaLu1
aaBaa1b
bbbb1Lk
bababab
要将内联的更改保存到同一文件中,请使用:
sed -i -E '/([[:alnum:]])\1{3}/d' file
详细信息:
([[:alnum:]])
:匹配任何字母数字并将其捕获到第一个捕获组中 \1{3}
:\1
是第一个捕获组的后向引用,{3}
匹配了3次相同的捕获
/d
:删除这些行