
私は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行にあることを確認し、tr
sgrep
は2つの連続した単語を表し、e
再びgrep
sは2つの(非連続的な)単語を表しますy
。それぞれがフィルタなので、最終結果はgrep
ContinuousとTwoを含む単語のセットです。ee
y
私の入力によると、結果は次のようになります。
beeyy
yeey
yeefy
reenydy
jyyee
答え2
欲しいと仮定正確に2つ y
うんより少なくともy
2つ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つ e
s(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'