【问题标题】:grep for only uppercase wordsgrep 仅用于大写单词
【发布时间】:2016-07-12 11:59:54
【问题描述】:

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

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

问题

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

【问题讨论】:

    标签: linux bash grep


    【解决方案1】:

    您可以将此正则表达式与任一侧的单词边界一起使用,并使用[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'
      

      【讨论】:

      • 如果我这样做,那么True 在输出中变成T
      • @JasmineLognnes:已更新。
      • 它也会匹配没有任何大写字母的___
      • @anubhava:好的,所以添加| grep -v '^_*$'
      • @choroba:我不是投反对票的人,但我当然可以反对 -1 但是您可能还需要包括 0-9,因为 OP 使用的是 \w
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 1970-01-01
        • 2013-07-11
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        • 2020-07-16
        • 2012-04-05
        相关资源
        最近更新 更多