
我試圖找到包含兩個連續 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
,然後grep
s 代表兩個連續的e
,然後grep
再次 s 代表兩個(可能不連續)y
。由於每個都是過濾器,因此最終結果是包含 Continuous和 Two 的grep
單字集。ee
y
根據我的輸入,結果是:
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*)!'
如果您還想要至少一個序列正好兩個 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
只是福克斯答案的變體:
grep -Po '\w*ee\w*' words.txt | grep 'y.*y'
如果你想要正好 2y
秒:
... | grep -v 'y.*y.*y'