删除以大写字母开头的所有行

nmv*_*tor 0 bash awk sed

我有一个大文本文件,每行有数千个单词.

如何删除以大写字母开头的所有行以及仅包含单个字母的所有行.

A          -> To be deleted
a          -> To be deleted
abjurer
abkar
abkari
Abkhas     -> To be deleted
Abkhasian  -> To be deleted
ablach
ablactate
ablactation
B          -> To be deleted
b          -> To be deleted
Bounce     -> To be deleted
...
...
Run Code Online (Sandbox Code Playgroud)

是否可以使用Bash执行此操作.

谢谢.

anu*_*ava 7

您可以使用:

grep -Ev '^([A-Z]|.$)' file 
abjurer
abkar
abkari
ablach
ablactate
ablactation
Run Code Online (Sandbox Code Playgroud)

或者使用sed来保存更改:

sed -i.bak -r '/^.$|[A-Z]/d' file
Run Code Online (Sandbox Code Playgroud)


fed*_*qui 5

我会说:

$ awk 'length($0)>1 && !/^[A-Z]/' file
abjurer
abkar
abkari
ablach
ablactate
ablactation
Run Code Online (Sandbox Code Playgroud)

这会检查字符串:

  • 超过1个字符.
  • 不以任何大写字母开头.

你也可以关注hek2mgl的好建议,!/^[[:upper:]]/'!/^[A-Z]/不是依赖你的语言环境.

  • 这听起来与最初的问题完全不同,需要进一步的信息.你可能最好问一个新问题来说清楚. (7认同)

Ed *_*ton 5

awk '!/^([[:upper:]]|[[:alpha:]]$)/' file

grep -Ev '^([[:upper:]]|[[:alpha:]]$)' file

sed -r '/^([[:upper:]]|[[:alpha:]]$)/d' file
Run Code Online (Sandbox Code Playgroud)