GREP 如何搜索包含特定字母(一次或多次)的单词?

4

我正在使用操作系统的字典文件进行扫描。我正在创建一个Java程序,允许用户输入任意组合的字母以查找包含这些字母的单词。如何使用grep命令来实现?


你想查找包含任何这些字母、所有这些字母或仅仅这些字母的单词吗? - Greg Hewgill
@GregHewgill 我想要在一个选项中找到所有内容,在另一个选项中只找到那些字母。 - stackoverflow
2
你可能会发现以下内容有帮助:如何在终端中使用Grep命令来作弊玩Scrabble和Words With Friends - Greg Hewgill
2个回答

7

查找仅包含给定字母的单词:

grep -v '[^aeiou]' wordlist

以上过滤掉了wordlist中除了列出的字符之外不包含任何其他字符的行。这有点像使用双重否定来获得你想要的结果。另一种方法是:

grep '^[aeiou]+$' wordlist

这个搜索会针对整行文本寻找一个或多个指定字母的连续序列。

要查找包含所有给定字母的单词则稍微麻烦些,因为我们想要的字母之间可能还有其他字母:

cat wordlist | grep a | grep e | grep i | grep o | grep u
(是的,上面有一个无效的cat使用,但这样对称性更好。)

0

你可以使用单个grep来解决Greg答案中的最后一个问题,前提是你的grep支持PCRE。(基于这个优秀的答案,简化了一下)

grep -P "(?=.*a)(?=.*e)(?=.*i)(?=.*o)(?=.*u)" wordlist

正向预查意味着它将匹配任何地方有字母"a",并且任何地方有字母"e",以此类推。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接