如何grep一个只有一个大写字母的单词?

how to grep a word with only one single capital letter?

txt 文件是:

bar
quux
kabe
Ass
sBo
CcdD
FGH

在这个例子中,我想用 只有一个大写字母 来 grep 单词,但是当我使用 "grep [A-Z]" 时,它会显示所有带有大写字母的单词。

有人能在这里找到 "grep" 解决方案吗?我的预期输出是

Ass
sBo
grep '\<[a-z]*[A-Z][a-z]*\>' my.txt

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

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

您可以使用

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