需要 grep+regex 方面的幫助

需要 grep+regex 方面的幫助

我試圖找到包含兩個連續 e 且還包含兩個 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

其中一些指令給出兩個 y 或兩個連續的 e,但不給出包含這兩個條件的單字。我現在該怎麼做?

答案1

我假設你的文件看起來像這樣:

beeyy yeey open iee eey yeefy
funny reenydy jyyee

並被稱為words2.txt.是的,內容有點隨機。這將顯示包含連續字元ee和兩個字y元的單字集:

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

這首先確保每個單字與 位於自己的行上tr,然後greps 代表兩個連續的e,然後grep再次 s 代表兩個(可能不連續)y。由於每個都是過濾器,因此最終結果是包含 Continuous和 Two 的grep單字集。eey

根據我的輸入,結果是:

beeyy
yeey
yeefy
reenydy
jyyee

答案2

假設你想要正好兩個 y是而不是至少y兩個grep,如果使用 PCRE 支援構建,則使用 GNU :

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

或與ast-開放grep(2014年1月26日或更新):

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

如果您還想要至少一個序列正好兩個 es (而不是 3 個或更多),即例如匹配eeyyeeyyeee但不匹配eeeyy),與 GNU grep -P

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

答案3

只是福克斯答案的變體:

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

如果你想要正好 2y秒:

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

相關內容