在bash中如何使用grep显示所有以1个大写字母开头的单词?

How do you display all the words that start with 1 uppercase letter using grep in bash?

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

file.txt内容:

东西 1 东西 2
字 1 字 2
这是更低的

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

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

使用 GNU grep,您可以使用

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

注意:

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

参见 online demo:

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

输出:

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

How do you display all the words

很简单:

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