linux - 从文件中删除连续包含 4 个或更多相同字符的行

标签 linux bash text automation

我希望标题足以解释我需要帮助的内容,但我会更详细地解释它。

我有一个文本文件,每行包含 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/

相关文章:

php - 使用 symfony2 和 twig 创建文件文本

linux - Docker 在没有运行任何容器的情况下使用了近 8GB

linux - 为什么 mul 指令不能实现常量乘法?

linux - 将 debian 移植到 leopord dm368

linux - 每次在 linux 上运行 shell 脚本时创建一个新目录

Bash: "command not found"简单变量赋值

bash - 如何更改 .dat 文件中特定列的值 | bash

java - 如何检测Java中的换行符

linux - AWK 对 2 列的值求和并附加到记录

Python:打开(文件名, 'w')用于不存在的文件