所以我接到了一项任务,问题是:
你会输入什么命令来查看以'd'开头的5个字母的单词(大写或小写),然后是小写的元音,以's'结尾?
grep '^[Dd][aeiouy]..[s]' /usr/share/dict/words
^[Dd]
表示第一个字母是D或d。完美。
[aeiouy]
意味着下一封信将是其中之一。完美。
两个点表示接下来的两个字符可以是他们想要的任何内容。完美。
而s
因为它以s结尾。完美。
但是当我点击进入时,我会遇到诸如贬值和贬低之类的事情。 grep
的{{1}}参数不仅被忽略了,而且已经触及了太多的单词,我无法弄清楚我做错了什么。
答案 0 :(得分:1)
你需要锚定结束。像这样:
grep '^[Dd][aeiouy]..[s]$' /usr/share/dict/words
否则,您将匹配所有以' [Dd] [aeiouy]开头的单词.s'这就是为什么你会得到像" dumpster"
这样的东西答案 1 :(得分:0)
我相信^和$是字符串终结符,所以除非该行只包含您正在寻找的单词,否则您将无法找到它。如果您尝试,它只适用于字典文件,但不适用于一般文件。你应该在两边使用\ b,因为它们是单词边界。
\ B [DD] [aeiouy] .. [秒] \ B'/ P>
但是,grep不会只返回这些词。它将返回与表达式匹配的整行,例如:
~$ grep "\b[Dd][aeiouy]..[s]\b" test
aacd danis daniel danis Dunns daniedanilsanielfk
在这种情况下,只需使用参数-o,仅打印匹配的单词,每行一个。
~$ grep -o "\b[Dd][aeiouy]..[s]\b" test
danis
danis
Dunns