2016-07-12 79 views
1

我想找到所有的話,所有的全部大寫,但是當我做grep的只有大寫單詞

grep -oP '\w*[A-Z]+\w*' * 

我得到

words.py:StringValue 
words.py:WORDS 
words.py:WORDS_ANSWERED 
words.py:Answered 
words.py:True 

,我所希望看到的

words.py:WORDS 
words.py:WORDS_ANSWERED 

問題

如何確保只輸出所有大寫字?

回答

5

您可以使用此正則表達式用字邊界兩側,並通過使用[A-Z0-9_]代替\w

grep -H -oP '\b[A-Z0-9_]*[A-Z]+[A-Z0-9_]*\b' * 

words.py:WORDS 
words.py:WORDS_ANSWERED 
0

如果您不想在輸出中使用\w,請不要將其包含在模式中。

grep -oP '[A-Z]+' * 

要獲得預期的輸出,不過,你需要包括下劃線和單詞邊界:

grep -oP '\b[A-Z_0-9]+\b' 

如果你想避免____和類似的(?是他們共同的Python代碼),使用

grep -oP '\b[A-Z_0-9]*[A-Z][A-Z_0-9]*\b' 
+1

如果我這樣做, ,那麼'True'在輸出中變成'T'。 –

+0

@JasmineLognnes:更新。 – choroba

+0

它也會匹配沒有任何大寫字母的___。 – anubhava

0

正則表達式認爲SAT是大寫單詞。所以這取決於你如何定義大寫單詞。從你的例子看來,你正在尋找更像^[A-Z_]+$的東西。或者,如果通過「大寫的單詞」你的意思是「沒有小寫字符」,[^a-z]+$

相關問題