grep仅用于大写单词

时间:2016-07-12 11:59:54

标签: linux bash 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

问题

如何确保只输出所有大写单词?

3 个答案:

答案 0 :(得分:6)

你可以使用这个带有字边界的正则表达式并使用[A-Z0-9_]而不是\w

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

words.py:WORDS
words.py:WORDS_ANSWERED

答案 1 :(得分: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'

答案 2 :(得分:0)

正则表达式认为SAT是大写字词。所以这取决于你如何定义大写单词。在您的示例中,您似乎正在寻找更像^[A-Z_]+$的内容。或者,如果通过"大写单词"你的意思是"没有小写字符",[^a-z]+$