2017-03-15 29 views
2

我使用termux在Android上運行bash shell爲什麼grep -n「[^ aeiou] +」返回不存在元音的行時不含元音?

目標是打印不包含任何元音的字符或詞。 CMDS的

序列類型:

$ cat f4 
a 
b 
c 
bb 
$ grep -n "[^aeiou]+" f4 
$ 

無法理解爲什麼正則表達式沒有給出預期輸出。

+1

撇開:'cmd'是Windows外殼。它不適用於此。 –

+1

此外,您的問題標題應該足夠具體,以便有人可以用它來識別您的特定問題。不僅僅是「我在X上遇到問題」,而是「我在X上遇到了這個問題」。這個網站的目的是建立一個對人們有用的問題和答案的數據庫,而有用的部分是有一個標題,讓別人從搜索結果的摘要中確定他們是否有同樣的問題。 –

+1

(另外,在Linux上命令是區分大小寫的,所以你不能在這裏運行'Cat'而不是'cat'並讓它工作;我已經冒相應的編輯)。 –

回答

1

第一張:+是ERE的延伸。要建立一個相當於BRE命令可能是這樣的:

grep '[^aeiou]\{1,\}$' 

...或者你可以添加-E參數或使用egrep來實現這種擴展。


第二:如果你的目標是找到單詞,沒有元音,而不是簡單地包含至少一個非元音字符的話,你需要錨你的正則表達式:

grep '^[^aeiou]\{1,\}$' 

或者,作爲一個ERE,

grep -E '^[^aeiou]+$' 

在前面的^和背面的$是錨:釷確保你所匹配的內容從行的開頭一直到行尾,而不是存在於的某處

+1

或者,更簡單地說,使用'-v'來匹配補碼:'grep -v'[aeiou]''。 –