【问题标题】:How do you display all the words that start with 1 uppercase letter using grep in bash?如何在 bash 中使用 grep 显示所有以 1 个大写字母开头的单词?
【发布时间】:2021-06-17 23:24:52
【问题描述】:

我尝试过这样的事情 sed 's/^[ \t]*//' file.txt | grep "^[A-Z].* " 但它只会显示以大写开头的单词开头的行。

file.txt 内容:

某事1某事2
单词1 单词2
这个比较低

输出将是Something1 something2,但我希望它也显示第二行,因为还有一个以大写字母开头的单词。

【问题讨论】:

    标签: bash grep


    【解决方案1】:

    使用 GNU grep grep -P "[A-Z]+\w*" file.txt 可以工作。或者,正如@Shawn 在下面的评论中所说,grep -P '\b[A-Z]' file.txt 也可以使用。如果您只想要单词而不是整行,grep -Po "[A-Z]+\w*" file.txt 会给您单个单词。

    【讨论】:

    • 开头不应该有\w*。这导致它可以在任何地方匹配带有大写字母的单词,而不仅仅是在前面。
    • grep -P '\b[A-Z]' file.txt 更近了。
    • 两个优点 - 我会编辑我的答案
    • 有没有办法省略单词中间包含大写字母的单词,例如“invokeLater”?感谢它完成了我最想做的工作。
    • 是的 - grep -P '\b[A-Z]' file.txt 将忽略中间带有大写字母的单词。如果这个答案解决了你的问题,请accept the answer
    【解决方案2】:

    使用 GNU grep,您可以使用

    grep '\<[[:upper:]]' file
    grep '\b[[:upper:]]' file
    

    注意

    • \&lt; - 前导词边界(\b 是词边界)
    • [[:upper:]] - 任何大写字母。

    online demo

    #!/bin/bash
    s='Something1 something2  
    word1 Word2  
    this  is  lower
    папа Петя'
    grep '\<[[:upper:]]' <<< "$s"
    

    输出:

    Something1 something2  
    word1 Word2  
    папа Петя
    

    【讨论】:

      【解决方案3】:

      你如何显示所有的单词

      这很简单:

      grep -wo '[A-Z]\w*'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2021-12-18
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        相关资源
        最近更新 更多