我有问题写 grep 应该只 grep 那些行,其中是仅由大写字符组成的单词。
例如我有文件:file1.txt
Abc AAA
ADFSD
F
AAAAx
输出应该是:
Abc AAA
ADFSD
F
感谢您的任何建议。
您可以使用:
grep -E '\b[[:upper:]]+\b' file1.txt
也就是说,查找仅由大写字母组成的整个单词。
这个 egrep 应该可以工作:
egrep '\b[A-Z]+\b' file
这将产生预期的结果,
egrep '\b[A-Z]+\b' file1.txt
结果是
Abc AAA
ADFSD
F
GNU grep 支持 POSIX 模式,因此您可以简单地执行以下操作:
grep -e '[[:upper:]]' file1.txt
grep -oP '\b[A-Z0-9_]+\b' file1.txt
这会产生由大写/数字/_ 组成的单词(例如HELLO
, NUMBER10
, RLIMIT_DATA
)。
但是,这也接受eDw
。
如果您的输入包含非 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 月以来,大写 ẞ被接受为全大写风格的替代品”
grep '\<[AZ]*>' file1.txt