10

我有问题写 grep 应该只 grep 那些行,其中是仅由大写字符组成的单词。

例如我有文件:file1.txt

Abc AAA
ADFSD
F
AAAAx

输出应该是:

Abc AAA
ADFSD
F

感谢您的任何建议。

4

7 回答 7

13

您可以使用:

grep -E '\b[[:upper:]]+\b' file1.txt

也就是说,查找仅由大写字母组成的整个单词。

于 2013-10-08T17:48:19.560 回答
10

这个 egrep 应该可以工作:

egrep '\b[A-Z]+\b' file
于 2013-10-08T17:49:29.040 回答
3

这将产生预期的结果,

egrep '\b[A-Z]+\b'  file1.txt

结果是

Abc AAA
ADFSD
F
于 2013-10-08T17:46:53.743 回答
1

GNU grep 支持 POSIX 模式,因此您可以简单地执行以下操作:

grep -e '[[:upper:]]' file1.txt

于 2013-10-08T17:47:24.830 回答
1
grep -oP '\b[A-Z0-9_]+\b' file1.txt  

这会产生由大写/数字/_ 组成的单词(例如HELLO, NUMBER10, RLIMIT_DATA)。

但是,这也接受eDw

于 2017-12-30T17:25:17.360 回答
1

如果您的输入包含非 ASCII 字符,您可能希望使用\p{Lu}而不是[A-Z]

grep -P '\b\p{Lu}+\b' file

为了

LONDON 
Paris
MÜNCHEN Berlin

这将返回

LONDON
MÜNCHEN Berlin

您可能可以手动列出其中大部分内容,正如@Skippy-le-grand-gourou 所说, egrep 扩展[A-Z]到重音字母,但是通过使用\p{Lu},您不需要处理诸如“然而,自 2017 年 6 月以来,大写 ẞ被接受为全大写风格的替代品”

于 2016-11-02T08:00:08.563 回答
0

grep '\<[AZ]*>' file1.txt

于 2013-10-08T17:58:09.023 回答