私の使命は、最初の単語を含むegrep行を見つけることです。正確に3つの同じ文字。私は逆参照を試しましたが、3つ以上の同じ文字で構成される単語を見つけるパターンを作成する方法だけが見つかりました。
egrep -i '^[^[:alpha:]]*\<[a-z]*([a-z])[a-z]*(\1[a-z]*){2}\>'
ベストアンサー1
以下は、3つの同じ[:alpha:]文字のみを含む行の先頭のすべての「単語」と一致します。
grep -i '^\([[:alpha:]]\)\1\1\b'
またはgrepの-E
(--extended-regexp
)または-P
(別名--perl-regexp
)オプションを使用してください。
grep -iE '^([[:alpha:]])\1\1\b'
grep -iP '^([[:alpha:]])\1\1\b'
これはGNU grepおよび(バージョンを除く-P
)FreeBSDのgrepと連携します。他のバージョンのgrepでは機能しない可能性があります。
以下を含むすべての長さの単語を一致させたい場合3つ以上どこでも同じアルファベット文字を使用するのは少し難しいです。あなたは否定的な予測、Perl互換の正規表現が必要です。
grep -E
つまりegrep
、使用できません。廃止)。
たとえば、
$ grep -iP '^[[:alpha:]]*([[:alpha:]])((?:(?!\1)[[:alpha:]])*\1){2}[[:alpha:]]*\b' /usr/share/dict/words
Aaliyah
Aaliyah's
Aarau
Aargau
Aaronical
Abadan
Abbottstown
Abbottstown's
Aberdeen
Aberdeen's
...
zoozoo
zoozoos
zuzzes
zwitterionic
zygogeneses
zygomorphous
zymogeneses
zyzzyva
zyzzyvas
zzz
(thisによると、wc -l
これは私の/usr/share/dict/wordsファイルにある344817ワードのうち67117と一致します)
最後に、単語だけを一致させます。正確に3どこでも同じ [:alpha:] 文字:
$ grep -iP '^[[:alpha:]]*([[:alpha:]])((?:(?!\1)[[:alpha:]])*\1){2}[[:alpha:]]*\b' /usr/share/dict/words |
grep -viP '^[[:alpha:]]*([[:alpha:]])((?:(?!\1)[[:alpha:]])*\1){3}'
最初のgrepは3つ以上の同じ文字を持つ単語を探し、2番目のgrepは4つ以上の同じ文字を持つ単語を除外します。
単一の正規表現でこれを実行できるかどうかはわかりません。
(これは私の/usr/share/dict/wordsファイルの56820ワードと一致します)。