我希望标题足以解释我需要帮助的内容,但我会更详细地解释它。
我有一个文本文件,每行包含 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 的正则表达式?我在互联网上查找 grep 正则表达式,但它们通常只检查一行中有多少相同的字符,而不检查它们是否按顺序排列。如果有什么比使用正则表达式(可以自动化并从基于 Linux 的发行版运行)更有效的方法,我愿意接受这样的建议。
我目前正在使用 Manjaro Linux。
谢谢!
最佳答案
使用gnu sed
,您可以使用以下命令:
sed -E '/([[:alnum:]])\1{3}/d' file
aaBaa1b
bababab
其中文件
是:
cat file
aaaaLu1
aaBaa1b
bbbb1Lk
bababab
要将更改内联保存到同一文件中,请使用:
sed -i -E '/([[:alnum:]])\1{3}/d' file
详细信息:
([[:alnum:]])
:匹配任何字母数字并将其捕获到第一个捕获组中\1{3}
:\1
是第一个捕获组的反向引用,{3}
匹配 3 次出现的相同内容/d
:删除这些行
关于linux - 从文件中删除连续包含 4 个或更多相同字符的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565071/