grepを使用して、各文字が最大1回表示される単語を見つけます。

grepを使用して、各文字が最大1回表示される単語を見つけます。

各単語が別の行に配置される大きなテキストファイルがあり、文字を含む各単語を最大1回検索する必要があります。

(私が見つけなければならない単語の例:指、石炭、夢、私、ピーナッツ)

(出力で受信を許可しない単語の例:test(2 tを含む)、strict(2 sを含む)、zepelin(2 eを含む))

答え1

GNUの使用sed:

sed -E '/(.).*\1/d' <file

GNUを使用すると、sed以下のように正規表現でキャプチャグループと逆参照を使用できます。私たちは単一の文字キャプチャを使用し、必要に応じて他の文字をキャプチャ(.)してから、同じ文字を再キャプチャします。パターンが一致した場合は入力からその行を削除し、そうでない場合はその行を印刷します。

例:

$ cat file
coal
dream
fingers
me
peanut
serious
zepelin
$ sed -E '/(.).*\1/d' <file
coal
dream
fingers
me
peanut

繰り返される文字を含む単語を探す:

$ sed -E '/(.).*\1/!d' <file
serious
zepelin

grepこれはGNUでも動作するようです:

$ grep -vE '(.).*\1' <file
coal
dream
fingers
me
peanut
$ grep -E '(.).*\1' <file
serious
zepelin

関連情報