大写字母的grep

Ami*_*ani 9 grep

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

public final Foo BAR;
Run Code Online (Sandbox Code Playgroud)

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

Jos*_* R. 14

实际上,使用-oswitch 时,GNUgrep只返回匹配的内容。怎么样:

grep -oP "\w*[A-Z]+\w*" yourfile.txt
Run Code Online (Sandbox Code Playgroud)

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

正如下面所指出的,这可能不是最便携的解决方案。Perl 中的一个便携式替代方案是

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

  • 请注意,此选项是特定于 GNU 的,并且不适用于 `grep` 的多个实现。使用 `sed` 是我知道如何做到这一点的唯一可移植方式。 (4认同)
  • 我不是说这暗示你错了,而是为了澄清那些不使用湿件解析 PCRE 的人。 (3认同)

h3r*_*ler 6

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

sed 's/.*\([A-Z]*\).*/\1/g' <file>
Run Code Online (Sandbox Code Playgroud)

或者

sed 's/[a-z]*\| //g' <file>
Run Code Online (Sandbox Code Playgroud)


Ale*_*ach 5

POSIX基本正则表达式标准(在缺省情况下使用grepvimlesssed用途等)\<\>以表示字边界。这允许一个字母跟随空格,以及非字母数字字符,如引号、破折号、等号等。 使用该-o选项在新行上打印每个匹配项,等等:

grep -o '\<[A-Z][a-z]*\>' yourfile.txt
Run Code Online (Sandbox Code Playgroud)

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

grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt
Run Code Online (Sandbox Code Playgroud)