我有一个文件,其中包含大写单词的声明,例如:
public final Foo BAR;
Run Code Online (Sandbox Code Playgroud)
这些声明并不都是统一的。有没有办法让我从行中找出大写字母的单词?我知道如何找到其中包含大写字母的行,但这不是我想要的。我只想要匹配的大写字母单词。谢谢!
Jos*_* R. 14
实际上,使用-o
switch 时,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)
你可以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)
的POSIX基本正则表达式标准(在缺省情况下使用grep
,vim
,less
,sed
用途等)\<
和\>
以表示字边界。这允许一个字母跟随空格,以及非字母数字字符,如引号、破折号、等号等。 使用该-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)