我想找到所有大写的所有单词,但是当我这样做时
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
问题
如何确保只输出所有大写单词?
答案 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)
正则表达式认为S
,A
和T
是大写字词。所以这取决于你如何定义大写单词。在您的示例中,您似乎正在寻找更像^[A-Z_]+$
的内容。或者,如果通过"大写单词"你的意思是"没有小写字符",[^a-z]+$