grep + regexの助けが必要です。

grep + regexの助けが必要です。

私は2つの連続したeと2つのy(存在する場合)を含む単語のセットを見つけようとしています。しかし、これまで私は次のコマンドを試しました。

grep -e '[y&y].*[ee]' -e '[y&y].*[ee]' words2.txt 
grep -e 'y.y' -e 'ee' words2.txt
grep -X '.*[y.y].*&.*[ee].*' words2.txt 
grep -X '.[*y.y].*&.[*ee].*' words2.txt

これらのコマンドのいくつかは、2つのyまたは2つの連続したeを提供しますが、2つの条件のうちの1つを含む単語は提供しません。今どうすればいいですか?

答え1

あなたのファイルが次のようになるとします。

beeyy yeey open iee eey yeefy
funny reenydy jyyee

words2.txtはい、内容は少しランダムです。これにより、連続した文字eeと2つの文字を含むy単語のセットが表示されます。

< words2.txt tr ' ' '\n' | grep 'ee' | grep 'y.*y'

これにより、最初に各単語が1行にあることを確認し、trsgrepは2つの連続した単語を表し、e再びgrepsは2つの(非連続的な)単語を表しますy。それぞれがフィルタなので、最終結果はgrepContinuousとTwoを含む単語のセットです。eey

私の入力によると、結果は次のようになります。

beeyy
yeey
yeefy
reenydy
jyyee

答え2

欲しいと仮定正確に2つ yうんより少なくともy2つgrep、PCREサポートでビルドする場合はGNUを使用します。

grep -Pow '(?=\w*y\w*y)(?!\w*y\w*y\w*y)\w*ee\w*'

または全開grep(2014年1月26日または更新):

grep -Xow '\w*ee*\w*&\w*y\w*y\w*&(\w*y\w*y\w*y\w*)!'

少なくとも1つのシーケンスが必要な場合正確に2つ es(3つ以上の代わりに)、つまり一致またはeeyy一致eeyyeeeしないeeeyy)、GNUを使用するgrep -P

grep -Pow '(?=\w*y\w*y)(?!\w*y\w*y\w*y)\w*(?<!e)ee(?!e)\w*'

答え3

Foxの答えが変形しました。

grep -Po '\w*ee\w*'  words.txt | grep 'y.*y'

正確に2秒が必要な場合y

... | grep -v 'y.*y.*y' 

関連情報