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

时间:2015-05-07 12:01:12

标签: 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
...
...

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

感谢。

4 个答案:

答案 0 :(得分:7)

您可以使用:

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

或者使用sed来保存更改:

sed -i.bak -r '/^.$|[A-Z]/d' file

答案 1 :(得分:5)

我会说:

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

这会检查字符串:

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

您也可以关注hek2mgl's good suggestion并使用!/^[[:upper:]]/'代替!/^[A-Z]/,而不是依赖于您的语言区域。

答案 2 :(得分:5)

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

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

sed -r '/^([[:upper:]]|[[:alpha:]]$)/d' file

答案 3 :(得分:4)

我会使用sed

sed '/^.$/d;/^[[:upper:]]/d' file

这是由;分隔的两个命令。第一个删除仅包含单个字母的行,第二个删除以大写字母开头的行。我真的鼓励您使用[[:upper:]]而不是[A-Z]来使其独立于您的语言环境。