仅搜索大写单词的grep

4

我想找到所有大写的单词,但是当我这样做时

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

我了解

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

where I were hoping for

words.py:WORDS
words.py:WORDS_ANSWERED

问题

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

3个回答

8
您可以使用单词边界和[A-Z0-9_]代替\w来匹配此正则表达式:
grep -H -oP '\b[A-Z0-9_]*[A-Z]+[A-Z0-9_]*\b' *

words.py:WORDS
words.py:WORDS_ANSWERED

2

如果您不想在输出中包含 \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 - Jasmine Lognnes
@JasmineLognnes:已更新。 - choroba
它也会匹配 ___,其中没有任何大写字母。 - anubhava
@anubhava:好的,那么加上 | grep -v '^_*$' - choroba
@choroba:我不是那个给你点踩的人,但我可以点赞来抵消-1。不过你可能需要包括0-9,因为OP正在使用\w。 - anubhava

0
正则表达式认为 SAT 是大写单词。所以这取决于您如何定义大写单词。从您的示例中,似乎您正在寻找更像 ^[A-Z_]+$ 的东西。或者,如果您所说的“大写单词”是指“没有小写字符”,那么可以使用 [^a-z]+$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接