【问题标题】:how to grep a word with only one single capital letter?如何grep一个只有一个大写字母的单词?
【发布时间】:2020-07-16 19:20:00
【问题描述】:

txt文件是:

bar
quux
kabe
Ass
sBo
CcdD
FGH

在本例中,我想对只有一个大写字母的单词进行 grep,但是当我使用“grep [A-Z]”时,它会显示所有大写字母的单词。

有人可以在这里找到“grep”解决方案吗?我的预期输出是

Ass
sBo

【问题讨论】:

  • “单词”是否仅表示字母?默认情况下,“word”字符是字母、数字和下划线。请澄清 - 您所有的测试输入都是全字母,但在您的真实数据中是这样吗?
  • awk -F[A-Z] NF==2??
  • @oguzismail - 这是grep 解决方案,正如 OP 所要求的那样?
  • @mathguy 不,这就是为什么它是一个评论
  • @mathguy 也许 OP 不知道其他可能有用的工具(对于新手来说并非不可能)。而且它是一个标准实用程序,为什么不提它呢?

标签: grep letter


【解决方案1】:
grep '\<[a-z]*[A-Z][a-z]*\>' my.txt

将匹配 ASCII 文本文件 my.txt 中的行,前提是它们至少包含一个完全由 ASCII 字母组成的单词,其中一个是大写字母。

【讨论】:

    【解决方案2】:

    您似乎有一个文本文件,每个单词都占一行。

    你可以使用

    grep '^[[:lower:]]*[[:upper:]][[:lower:]]*$' file
    

    请参阅grep online demo

    ^ 匹配字符串的开头(这里是 line,因为 grep 默认情况下逐行运行),然后 [[:lower:]]* 匹配 0 个或多个小写字母,然后 [[:upper:]] 模式匹配任何大写字母,然后[[:lower:]]* 匹配 0+ 个小写字母,$ 断言字符串末尾的位置。

    如果你需要用一个大写字母匹配整行,你可以使用

    grep '^[^[:upper:]]*[[:upper:]][^[:upper:]]*$' file
    

    与上述模式的唯一区别是[^[:upper:]] 括号表达式匹配除大写字母之外的任何字符。见another grep online demo

    要提取其中包含单个大写字母的单词,您可以使用单词边界,如 mathguy 的答案所示。使用 GNU grep,您还可以使用

    grep -o '\b[^[:upper:]]*[[:upper:]][^[:upper:]]*\b' file
    grep -o '\b[[:lower:]]*[[:upper:]][[:lower:]]*\b' file
    

    yet another grep online demo

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多