2012-05-10 10 views
3

オペレーティングシステムの辞書ファイルを使用してスキャンしています。私は、ユーザーがそれらの文字を含む単語を見つけるために文字の任意の組み合わせを入力できるようにするJavaプログラムを作成しています。 grepコマンドを使ってこれをどうすればいいですか?GREP特定の文字を含む単語(1回以上)を検索するにはどうすればよいですか?

+0

それらの文字の* any *、それらの文字のすべて*、またはそれらの文字のみを含む単語を検索したいですか? –

+0

@GregHewgill私は1つのオプションのALLと、別のオプションの文字だけを見つけたい – stackoverflow

+2

次のような便利なことがあります:[スクラブルと友だちとの間で不正行為をする端末のGrepコマンドの使い方](http:// www .edibleapple.com/2011/04/13/grep-command-in-terminal-to-cheat-at-scrabble-and-words-with-friends /) –

答えて

3

のみ与えられた文字を含む単語検索するには:

grep -v '[^aeiou]' wordlist 

上記フィルタアウトが記載されたもの以外の任意の文字が含まれていないことをwordlistの行を。それは、あなたが望むものを得るために二重否定を使うことのようなものです。これを行うもう1つの方法は、選択された文字の1つ以上のシーケンスの行全体を検索します:

grep '^[aeiou]+$' wordlist 

私たちが望むものの間で他の文字が存在する可能性があるので与えられた文字のすべてを含む単語を検索するに

は、もう少し長いです:

cat wordlist | grep a | grep e | grep i | grep o | grep u 

(はい、無用があります上記catの使用が、対称性がこのように優れています。)

0

あなたはグレッグの答えの最後の問題を解決するために、単一のgrepを使用することができますが、あなたのgrepはPCREがサポートされていました。などなど....

grep -P "(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)" wordlist 

肯定先読みが、それは「」どこで何も一致することを意味し(this excellent answerに基づいて、ビットを煮詰め)、そしてどこでも「E」、および

関連する問題