我试图找到包含两个连续 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'