如何仅删除所有用大写字母写的单词(通过使用sed和/或awk)

Vir*_*tos 3 bash shell awk sed

我试图仅使用sed删除所有用大写字母写的单词:

sed -r "s/\b[A-Z]\w*\s*//g" < file1 > file2
Run Code Online (Sandbox Code Playgroud)

但是此解决方案会捕获所有以大写字母开头的单词并将其删除(这不是目标)。

这是一个例子:

file1内容:

sed -r "s/\b[A-Z]\w*\s*//g" < file1 > file2
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的(file2内容):

AAAAAAAAAAAA
BBbbbbb
AbAbAbAb
aaaaaBBBBB
AAAAAA BBBBBB
A1-B1
a1-b1
A1-b1 AA
AAAAA BBBBB AAAAA
Abbbb AAA
AAAAA AAAABB
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b
Run Code Online (Sandbox Code Playgroud)

每行至少包含一位数字或一个小写字母,应保持原样(不应删除)。

anu*_*ava 5

使用egrep:

egrep "[^[:upper:] ]" file
BBbbbbb
AbAbAbAb
aaaaaBBBBB
A1-B1
a1-b1
A1-b1 AA
Abbbb AAA
Abbbb Baaaa Aaaaa AB
AAAAAA1
BBBBBBb
AAAAAA 1
BBBBBB b
Run Code Online (Sandbox Code Playgroud)

或使用awk:

awk '/[^[:upper:] ]/' file
Run Code Online (Sandbox Code Playgroud)

或使用sed:

sed -n '/[^[:upper:] ]/p' file
Run Code Online (Sandbox Code Playgroud)