grep 查找大写单词

grep 查找大写单词

我有一个文件,其中包含带有大写单词的声明,例如:

public final Foo BAR;

这些声明并不都是统一的。有没有办法让我只从行中找出大写字母的单词?我知道如何找到其中包含大写字母的行,但这不是我想要的。我只想要匹配的大写字母单词。谢谢!

答案1

实际上,通过-oswitch,GNUgrep仅返回它匹配的内容。怎么样:

grep -oP "\w*[A-Z]+\w*" yourfile.txt

请注意,此正则表达式将匹配大写字母的单词任何地方在他们之中,不一定是开始。如果它们不同,您应该对其进行调整以满足您的需求。

如下所述,这可能不是最便携的解决方案。 Perl 中的一个可移植替代方案是

perl -nE 'say $1  while /(\w*[A-Z]+\w*)/g' yourfile.txt

答案2

您可以sed只返回字符串而不是整行

sed 's/.*\([A-Z]*\).*/\1/g' <file>

或者

sed 's/[a-z]*\| //g' <file>

答案3

POSIX 基本正则表达式标准grep(在、vimlesssed等中默认使用)使用\<\>来表示单词边界。这允许字母跟随空格,以及非字母数字字符,如引号、破折号、等号等。使用该-o选项在新行上打印每个匹配项,等等:

grep -o '\<[A-Z][a-z]*\>' yourfile.txt

同样,您可能需要更改正则表达式以满足您的需求。也许允许数字或第二个大写字母..?这既能..

grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt

相关内容