使用 grep 省略具有重复字符的字符串

使用 grep 省略具有重复字符的字符串

我觉得这个问题以前已经被问过,但我很难找到答案,而且它的可能性组合令人难以置信。许多资源提供了几乎接近的东西,但我无法让 grep 中的表达式正确地解决我的问题。

我正在使用 crunch 和字母数字输出创建一个单词列表:

crunch 8 8 ABCDEFGHIJKLMNOPQRSTUVWXYZ + 1234567890 -t %@%@%@%@

这将输出 8 个字母数字字符串,其中包含一个字母和一个数字,如下所示:

1A1A1A1A1A
1A1A21B2A3
1A1A31A1A3
...

我一直在尝试将输出通过管道传输到 grep,其中最终结果将省略任何模式重复中的任何字符的输出。由于紧缩输出的性质,连续重复已经被消除。有没有正确的表达方式来省略不连续的?或者有没有一种可能的方法可以通过紧缩来做到这一点?

1A1A1A1A1A not output
1A1A21B2A3 not output
1A1A31A1A3 not output

acceptable output:

1A2B3C4D
1B2A3D4C
1C3A2F5G

非常感谢任何试图理解这方面表达的帮助。

答案1

带有反向引用:

grep -v '\(.\).*\1'

-v是 re verse (打印不匹配的行),正则表达式是\(.\)捕获的任何单个字符,后跟任意数量的字符 ( .*),后跟\1之前捕获的相同字符。

相关内容