我試圖在大寫或小寫d,後面跟着元音,以小寫字母s結尾的文件中找到5個字母的單詞。只要符合5個字母的限制,該字詞還可以包含特殊字符。這是我提出並且工作的命令,除了一個條目不符合要求。它返回「多麗絲的」,這是一個6字的詞。有人可以給我一些指導,說明我做錯了什麼嗎?我在網上搜索,找不到任何與此特別相關的內容。在UNIX中使用grep和通配符
grep -w '[dD][aeiouy]..[s]' /usr/share/dict/words
我試圖在大寫或小寫d,後面跟着元音,以小寫字母s結尾的文件中找到5個字母的單詞。只要符合5個字母的限制,該字詞還可以包含特殊字符。這是我提出並且工作的命令,除了一個條目不符合要求。它返回「多麗絲的」,這是一個6字的詞。有人可以給我一些指導,說明我做錯了什麼嗎?我在網上搜索,找不到任何與此特別相關的內容。在UNIX中使用grep和通配符
grep -w '[dD][aeiouy]..[s]' /usr/share/dict/words
什麼的「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
我試過這個,當我這樣做時,它根本不會返回任何東西。 –
用egrep試試這個,然後: egrep'^ [dD] [aeiouy] .. [s] $'/ usr/share/dict/words –
單詞「Doris」滿足該模式,因此它返回該行。您可以通過在最後添加'$'來修復您的正則表達式。 – jitendra
也應該在正則表達式的開頭添加^。它應該看起來像這樣:grep -w'^ [dD] [aeiouy] .. [s] $'/ usr/share/dict/words – jitendra