学习GREP,命令不起作用,因为我一直在阅读

时间:2014-11-13 02:20:52

标签: unix grep

所以我接到了一项任务,问题是:

你会输入什么命令来查看以'd'开头的5个字母的单词(大写或小写),然后是小写的元音,以's'结尾?

grep '^[Dd][aeiouy]..[s]' /usr/share/dict/words

^[Dd]表示第一个字母是D或d。完美。

[aeiouy]意味着下一封信将是其中之一。完美。

两个点表示接下来的两个字符可以是他们想要的任何内容。完美。

s因为它以s结尾。完美。

但是当我点击进入时,我会遇到诸如贬值和贬低之类的事情。 grep的{​​{1}}参数不仅被忽略了,而且已经触及了太多的单词,我无法弄清楚我做错了什么。

2 个答案:

答案 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