我有一个文件,其中包含带有大写单词的声明,例如:
public final Foo BAR;
这些声明并不都是统一的。有没有办法让我只从行中找出大写字母的单词?我知道如何找到其中包含大写字母的行,但这不是我想要的。我只想要匹配的大写字母单词。谢谢!
答案1
实际上,通过-o
switch,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
(在、vim
、less
、sed
等中默认使用)使用\<
和\>
来表示单词边界。这允许字母跟随空格,以及非字母数字字符,如引号、破折号、等号等。使用该-o
选项在新行上打印每个匹配项,等等:
grep -o '\<[A-Z][a-z]*\>' yourfile.txt
同样,您可能需要更改正则表达式以满足您的需求。也许允许数字或第二个大写字母..?这既能..
grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt