grepを使用して、繰り返される文字を含む文字列を省略します。

grepを使用して、繰り返される文字を含む文字列を省略します。

この質問は以前に要求されたようですが、答えを見つけるのが難しくなり、可能性の組み合わせが驚くほどです。多くのリソースはほぼ同様のものを提供しますが、grepで問題を正しく解決するための表現を得ることはできません。

私は単語リストを作成するためにクランチと英数字の出力を使用しています。

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つまり、v(一致しない行の印刷)正規表現には、キャプチャされた\(.\)単一文字、その後に任意の数の文字(.*)、\1以前にキャプチャされた同じ文字が続きます。

おすすめ記事