如何使用两次或更多列出的特定字母列出单词列表?

时间:2015-03-06 07:56:54

标签: regex linux terminal grep

如果我恳求将每一个包含该字母的单词格式化,那就是' w'两次,我该怎么做?

当我尝试所有的时候,我得到的是两个人彼此相邻的话。

我试过了:

grep -P "(?=.*w)(?=.*w)" /usr/share/dict/words
egrep "(?=.*w)(?=.*w)" /usr/share/dict/words
cat /usr/share/dict/words | grep 'w' | grep 'w'

但没有任何东西能给我我想要的结果。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

你可以使用这个grep:

grep -Eo '\bw\w*w\w*\b'

示例:

echo 'abcw wowed drew won now wow watch' | grep -Eo '\bw\w*w\w*\b'
wowed
wow

答案 1 :(得分:0)

下面的grep会抓住至少有两个w的单词。

$ echo 'foo bar wow bar work wallewow' | grep -oP '\S*w\S*w\S*'
wow
wallewow

答案 2 :(得分:0)

要在/usr/share/dict/words中搜索包含字符w两次的字词,并在它们之间添加任意字符,

grep 'w.*w' /usr/share/dict/words

您使用的零宽度断言的问题是它不会向前跳过。因此(?=.*w)(?=.*w)会找到第一个w字符两次。同样,grep 'w' | grep 'w'会找到第一个w字符,并将包含它的行传递给grep的另一个实例。

(标准文件/usr/share/dict/words每行包含一个单词,因此我们可以使用" word"当我们真正意味着" line"时,这是{{1和朋友一起操作。真正从自由格式文本中获取单词更多地涉及。)