2017-08-29 79 views
0

我試圖在大寫或小寫d,後面跟着元音,以小寫字母s結尾的文件中找到5個字母的單詞。只要符合5個字母的限制,該字詞還可以包含特殊字符。這是我提出並且工作的命令,除了一個條目不符合要求。它返回「多麗絲的」,這是一個6字的詞。有人可以給我一些指導,說明我做錯了什麼嗎?我在網上搜索,找不到任何與此特別相關的內容。在UNIX中使用grep和通配符

grep -w '[dD][aeiouy]..[s]' /usr/share/dict/words

+0

單詞「Doris」滿足該模式,因此它返回該行。您可以通過在最後添加'$'來修復您的正則表達式。 – jitendra

+0

也應該在正則表達式的開頭添加^。它應該看起來像這樣:grep -w'^ [dD] [aeiouy] .. [s] $'/ usr/share/dict/words – jitendra

回答

0

什麼的「grep」做你不知道的是,它的打印所有包含「多麗絲」作爲一個整體的話,無論是之前或之後任何東西,或沒有行。

所以它看到「多麗絲的」,並且由於它包含了整個單詞「多麗絲」,它將它打印出來。

它還會打印出「我愛吃曲奇的多麗絲」一行,因爲它也包含了「多麗絲」這個單詞。

爲了得到你想要的,加上「^」的行爲和「$」你的正則表達式,像這樣:

grep -w '^[dD][aeiouy]..[s]$' /usr/share/dict/words 

這將確保「多麗絲」只有當它的唯一的文本匹配該線。

但是,如果你正在瀏覽一個「單詞」文件(每行一個單詞),你真的不需要grep的「-w」開關,因爲它已經有(幾乎)每行一個單詞。

那麼試試這個:

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

注意:如果 '^' 和 '$' 不會爲你工作,嘗試用 「egrep的」 替換 「grep的」,像這樣:

egrep '^[dD][aeiouy]..[s]$' /usr/share/dict/words 
+0

我試過這個,當我這樣做時,它根本不會返回任何東西。 –

+0

用egrep試試這個,然後: egrep'^ [dD] [aeiouy] .. [s] $'/ usr/share/dict/words –